Solution to Find the Culprit Managers Puzzle
There could be two possible scenarios
Here’s an n-1 query solution to part 1. Maintain three sets of people: UNSEEN, STACK, and DISCARD. Initialize the process by picking one arbitrarily to be the STACK, everything else is UNSEEN. Repeat the following step until UNSEEN is empty:
Pick an UNSEEN element x, remove it from UNSEEN. Ask the top of the STACK y about x. If y says “manager” pop y off the stack and DISCARD both x and y. If it says “engineer” add x to the top of the STACK.
After all elements have been processed in this way (n-1 comparisons), the top of the stack must be an engineer.
Why does this work? First observe that whenever we discard a pair, at least one of them is a manager. So among the rest of them (STACK and UNSEEN) a majority must still be engineers. So at the end, when UNSEEN is empty, there must be an engineer in the stack, therefore the top of the stack must be an engineer.
This can be improved to n-2 simply by stopping one earlier. When there’s one UNSEEN left, if the stack is empty, that UNSEEN one is an engineer. Otherwise, the top of the stack must be an engineer.
If is n is even and n>=4, as a first step we can just throw out one person, and appy this algorithm to the remaining n-1 obtaining n-3 comparisons. This gives the optimal algorithm.
2: If half or more of the people are managers, then the problem cannot be solved. The managers can ensure this simply by always lying. Now there’s way to separate the two sets of people. Each one simply claims the others are Managers.