cand:num cand -- число, num -- сколько раз оно ещё не спарено с другим числом 1 2 3 2 3 3 2 3 3 3 3 1 -1:0 1:1 1:0 3:1 3:0 3:1 3:2 3:1 3:2 3:3 3:4 3:5 3:4 [суффикс с cand=3 ] [троек >= не-троек ] [троек >= половины ] [bad <= половины ] [на префиксе] индукция по n: bad <= половины значит, [ ]+[ ] bad <= половины -- противоречие! Либо ответ cand, либо ответ не существует (-1). От противного: пусть ответ bad. ^^^^^ Подходит либо cand, либо ничего: 1 2 3 4 5 -1:0 1:1 1:0 3:1 3:0 5:1 Следующее: попробуем два процесса. 1 2 3 2 3 3 2 3 3 3 3 1 --------------------- --------------------- -1 3 Если троек >1/2, то в какой-то половине их тоже >1/2. [0..99) workers 99 manager