Codeforces Round #202 (Div. 1), problem: (A) Mafia editorial: http://codeforces.com/blog/entry/9031
Codeforces Round #202 (Div. 1), problem: (A) Mafia solution: http://ideone.com/JEoXON
#include <iostream> #include <cmath> #include <cstdio> #include <algorithm> using namespace std; int main() { long long int n, a, ma=0, cnt=0; scanf("%I64d", &n); for(int i=0; i<n; i++) { scanf("%I64d", &a); if(a>ma) ma=a; cnt+=a; } a=ceil((double)cnt/(n-1)), a=max(a, ma); printf("%I64d", a); return 0; }
note, courtesy of baklazan: http://codeforces.com/blog/entry/9031#comment-147355
Let's say you're going to play x games. If someone wanted to play more than x games, he wouldn't be able to do so, so he would be unhappy. Therefore, if everyone is happy, x ≥ ai must hold for each i, so
Let $b_i$ be number of games, where i-th player is supervisor and let ci be number of games, where he plays. In each game i-th player is playing, XOR supervising, so ci + bi = x. Also, he wants to play at least ai games, soai ≤ ci, thus bi ≤ ci + bi - ai, so bi ≤ x - ai.
Each game is supervised by one player, so x = b1 + b2 + ... + bn. Giving it all together:
Now we have two lower bounds for $x$ . Smallest x satisfying both of them is
This number of games is enough, because if first $x - a_1$ games are supervised by first player, next x - a2games are supervised by second player etc., until the x-th game, then everyone plays enough games and each game is supervised by someone.
No comments:
Post a Comment