如果可以进行游戏,那么必定每次游戏都会有一个人当裁判。所以判断是否可以进行游戏的条件就是检查对于n次游戏,是否都有n个人充当裁判。进行二分就十分简单了。
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; __int64 n, a[100100]; bool judge(__int64 x) { __int64 cnt = 0; for (__int64 i = 0; i < n; i++) { //脑残,没注意这个条件,导致一直WA if (x < a[i]) return false; cnt += x - a[i]; } return x <= cnt; } int main() { while (cin>>n) { for (__int64 i = 0; i < n; i++) cin>>a[i]; __int64 lb = 0, ub = 1e12; __int64 ans = 0; while (ub >= lb) { __int64 mid = (lb + ub)>>1; if(judge(mid)) { ans = mid; ub = mid - 1; } else lb = mid + 1; } cout<<ans<<endl; } return 0; }