#include <cstdio> #include <vector> #define FOR(i,a,b) for(int i=(int)(a); i<(int)(b); ++i) #define ulli unsigned long long int using namespace std; int t, n, a; vector<int> A; bool try_result(int N) { int used = 1; FOR(i,0,A.size()) { ulli max_games = 0; while (max_games < (ulli)A[i] && used <= N && (N - used >= A.size() - i)) { max_games += (ulli)(used) * (ulli)(N - used - 1); ++used; } if (max_games < (ulli)(A[i])) return false; } return true; } int main() { scanf("%d", &t); while (t--) { // Read input A.clear(); scanf("%d", &n); FOR(i,0,n) { scanf("%d", &a); if (a > 0) A.push_back(a); } // Binsearch int L = 2, R = 1000005; int result = R; while (L<=R) { int M = (L+R)/2; if (!try_result(M)) L = M+1; else { result = M; R = M-1; } } printf("%d\n", result); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | #include <cstdio> #include <vector> #define FOR(i,a,b) for(int i=(int)(a); i<(int)(b); ++i) #define ulli unsigned long long int using namespace std; int t, n, a; vector<int> A; bool try_result(int N) { int used = 1; FOR(i,0,A.size()) { ulli max_games = 0; while (max_games < (ulli)A[i] && used <= N && (N - used >= A.size() - i)) { max_games += (ulli)(used) * (ulli)(N - used - 1); ++used; } if (max_games < (ulli)(A[i])) return false; } return true; } int main() { scanf("%d", &t); while (t--) { // Read input A.clear(); scanf("%d", &n); FOR(i,0,n) { scanf("%d", &a); if (a > 0) A.push_back(a); } // Binsearch int L = 2, R = 1000005; int result = R; while (L<=R) { int M = (L+R)/2; if (!try_result(M)) L = M+1; else { result = M; R = M-1; } } printf("%d\n", result); } } |