// Witold Milewski
// PA 2025
#include <bits/stdc++.h>
#define int long long
#define i128 __int128_t
using namespace std;
#define FOR(i, a, b) for(int i=a; i<=b; ++i)
#define FORB(i, b, a) for(int i=b; i>=a; --i)
#define sz(A) (int)(A.size())
#define ll long long
#define eb emplace_back
#define pb push_back
#define pi pair<int, int>
#define f first
#define s second
#define rs resize
#define V vector
V<int> A;
int n;
int licznik(int x, int P, int Suma) {
int a = x*(x-1)*(x-2)/6;
int b = x*(x-1)/2*(Suma-x);
int c = P*x*(Suma-P-x);
return a+b+c;
}
bool check(int S) {
V<int> P(n+1, 0);
FOR(i, 1, n) {
bool f=0;
FOR(x, 0, 183) {
if(licznik(x, P[i-1], S)>=A[i]) {
P[i]=P[i-1]+x;
f=1;
break;
}
}
if(!f) return 0;
}
return 1;
}
void solve() {
cin >> n;
A.rs(n+1);
FOR(i, 1, n) {
cin >> A[i];
}
int lo=0;
int hi = 183*n+1;
while(lo<hi) {
int mid = (lo+hi)/2;
if(check(mid)) hi=mid;
else lo=mid+1;
}
cout << lo << '\n';
}
signed main() {
cin.tie(0) -> ios_base::sync_with_stdio(0);
int q;
cin >> q;
while(q--) solve();
}
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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | // Witold Milewski // PA 2025 #include <bits/stdc++.h> #define int long long #define i128 __int128_t using namespace std; #define FOR(i, a, b) for(int i=a; i<=b; ++i) #define FORB(i, b, a) for(int i=b; i>=a; --i) #define sz(A) (int)(A.size()) #define ll long long #define eb emplace_back #define pb push_back #define pi pair<int, int> #define f first #define s second #define rs resize #define V vector V<int> A; int n; int licznik(int x, int P, int Suma) { int a = x*(x-1)*(x-2)/6; int b = x*(x-1)/2*(Suma-x); int c = P*x*(Suma-P-x); return a+b+c; } bool check(int S) { V<int> P(n+1, 0); FOR(i, 1, n) { bool f=0; FOR(x, 0, 183) { if(licznik(x, P[i-1], S)>=A[i]) { P[i]=P[i-1]+x; f=1; break; } } if(!f) return 0; } return 1; } void solve() { cin >> n; A.rs(n+1); FOR(i, 1, n) { cin >> A[i]; } int lo=0; int hi = 183*n+1; while(lo<hi) { int mid = (lo+hi)/2; if(check(mid)) hi=mid; else lo=mid+1; } cout << lo << '\n'; } signed main() { cin.tie(0) -> ios_base::sync_with_stdio(0); int q; cin >> q; while(q--) solve(); } |
English