QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#847219 | #9920. Money Game 2 | jaker | WA | 311ms | 52196kb | C++20 | 3.5kb | 2025-01-07 19:07:51 | 2025-01-07 19:07:51 |
Judging History
answer
#include<bits/stdc++.h>
#define rep(i,j,k) for(int i = j;i <= k;++i)
#define repp(i,j,k) for(int i = j;i >= k;--i)
using namespace std;
template<class T> using Arr = std::vector<T>;
typedef long long LL;
const int MAXN = 500002;
const int THRE = 120;
int n;
int a[MAXN*2];
#define REG(x)(((x)-1) % n + 1)
int bit[MAXN*2];
LL val[MAXN*2];
pair<LL,int> left_ans[MAXN*2],right_ans[MAXN*2];
LL ans1[MAXN*2],ans2[MAXN*2];
void BruteF() {
static LL f[THRE+10][2*THRE+10];
static LL g[THRE+10][2*THRE+10];
for(int i = 1;i <= n;++i)
for(int j = 1;j <= 2*n;++j)
g[i][j] = f[i][j] = 0;
for(int i = 1;i <= n;++i) {
f[i][i] = 0;
for(int j = i+1; j <= i+n-1;++j)
f[i][j] = ( f[i][j-1] + a[REG(j-1)] ) / 2;
g[i][n+i] = 0;
for(int j = n+i-1; j > i; --j)
g[i][j] = ( g[i][j+1] + a[REG(j+1)] ) / 2;
}
for(int i = 1;i <= n;++i) {
LL ans = 0;
for(int j = 1; j <= n; ++j)
ans = std::max( ans , f[j%n+1][i] + f[j%n+1][n+i] + g[j][i] + g[j][n+i] );
ans1[i] = ans + a[i];
cout << ans1[i] << " ";
}
cout << endl;
}
void solve() {
cin >> n;
for(int i = 1;i <= n;++i) {
cin >> a[i];
a[i+n] = a[i];
}
if( n < THRE )
return BruteF();
LL nxt;
for(int i = 1;i <= 2*n;++i) {
int p = i;
LL now = a[p];
for(; p >= 1 && now; --p) {
if( now > 0 && p != i )
right_ans[p] = make_pair( val[p+1] , i );
// if( i == 2 ) {
// cerr << "p = " << p << ", now = " << now << endl;
// }
val[p] += (now + bit[p])/2;
nxt = (now+bit[p])/2;
if( now&1 && bit[p] ) bit[p] = 0;
else if( !bit[p] && now&1 ) bit[p] = 1;
now = nxt;
}
// if( i <= 20 ) {
// // cerr << "i = " << i << ", p = "<< p << ", ans[p] = " << right_ans[p].first << endl;
// rep(ttt,0,5) cerr << val[ttt] << " "; cerr << endl;
// rep(ttt,0,5) cerr << bit[ttt] << " "; cerr << endl;
// cerr << right_ans[1].first << endl << endl;
// }
}
for(int i = 1;i <= 2*n;++i) val[i] = bit[i] = 0;
for(int i = 2*n;i >= 1;--i) {
int p = i;
LL now = a[p];
for(; p <= 2*n && now;++p) {
if( now > 0 && p != i )
left_ans[p] = make_pair( val[p-1] , i );
val[p] += ( now + bit[p] ) / 2;
nxt = ( now + bit[p] ) / 2;
if( now&1 && bit[p] ) bit[p] = 0;
else if( !bit[p] && now&1 ) bit[p] = 1;
now = nxt;
}
}
for(int i = 1;i <= n;++i) {
LL ans = right_ans[i].first + left_ans[i+n].first + a[i];
// if( i <= 20 ) {
// cerr << left_ans[i+n].first << " " << right_ans[i].first << endl;
// }
int pos1 = right_ans[i].second,
pos2 = left_ans[i].second;
if( pos1 > n ) pos1 -= n;
if( pos2 > n ) pos2 -= n;
if( pos1 > i && pos2 < i );
else if( pos1 > i ) {
if( pos1 < pos2 );
else --ans;
}
else {
if( pos1 < pos2 );
else --ans;
}
cout << ans << " ";
}
cout << endl;
}
int main() {
ios::sync_with_stdio(false);
int T;
cin >> T;
while(T--)
solve();
return 0 ;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 2ms
memory: 9848kb
input:
3 5 2 1 4 3 5 5 2 1 3 1 2 1 1000000000
output:
6 5 7 8 8 4 4 5 4 4 1000000000
result:
ok 11 numbers
Test #2:
score: 0
Accepted
time: 1ms
memory: 7748kb
input:
1 10 8 15 18 15 13 4 14 4 17 5
output:
30 37 41 39 34 27 29 26 31 27
result:
ok 10 numbers
Test #3:
score: 0
Accepted
time: 0ms
memory: 7684kb
input:
1000 4 8 9 7 9 1 9 1 10 2 3 9 3 4 3 2 4 0 4 3 1 4 10 8 4 6 1 9 1 4 4 10 10 1 6 1 9 1 0 2 4 6 4 8 1 6 7 2 5 10 4 9 2 1 4 3 5 5 9 3 9 8 9 4 4 8 5 6 2 10 1 1 7 3 9 2 4 4 2 4 1 2 3 5 2 1 1 4 3 2 0 9 4 7 3 10 1 3 4 1 2 2 6 4 1 2 3 3 1 5 3 5 8 4 2 9 3 4 5 9 10 3 4 6 5 4 0 1 6 4 3 1 10 1 4 1 9 5 7 4 8 1 6 ...
output:
18 18 17 18 9 10 7 10 6 6 5 3 5 5 3 18 16 13 15 9 4 18 17 11 14 9 0 7 8 13 9 11 14 10 12 12 7 6 9 11 11 13 17 16 17 12 14 13 12 10 6 7 12 8 9 5 6 4 4 6 4 4 4 6 5 10 11 11 13 10 5 4 4 8 7 2 5 4 6 11 12 10 10 7 13 17 16 12 9 10 8 6 6 6 7 11 7 9 13 12 11 14 10 12 1...
result:
ok 2420 numbers
Test #4:
score: 0
Accepted
time: 3ms
memory: 9720kb
input:
1000 2 45733740 736448710 1 384264719 4 658671808 379716865 553196572 534986092 1 668964623 4 711670857 237459905 849354895 187613938 2 394629064 371184128 2 616819808 937720703 1 43217931 3 934395080 888433507 810476236 1 587663687 2 542163302 508453558 4 313836277 584869499 445629251 225398284 4 2...
output:
413958095 759315580 384264719 1254322429 1119397578 1175216002 1235849498 668964623 1136546502 1064876265 1239809530 1027491789 580221128 568498660 1085680159 1246130607 43217931 1783849951 1760869165 1721890529 587663687 796390081 779535209 830377481 1020951833 929222211 751348422 70477...
result:
ok 2440 numbers
Test #5:
score: 0
Accepted
time: 51ms
memory: 50820kb
input:
1 500000 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
output:
4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
result:
ok 500000 numbers
Test #6:
score: 0
Accepted
time: 43ms
memory: 51520kb
input:
1 499999 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
output:
4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
result:
ok 499999 numbers
Test #7:
score: 0
Accepted
time: 47ms
memory: 52196kb
input:
1 499800 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1...
output:
4 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 ...
result:
ok 499800 numbers
Test #8:
score: -100
Wrong Answer
time: 311ms
memory: 51868kb
input:
1 500000 50831937 44675374 26273308 55922669 39121681 59988372 34492729 33442351 51180456 41692596 39437453 54897084 38001252 46544549 55093280 38264131 54229588 51914925 28566111 46796223 48610138 48548724 51107017 44611895 37985173 46091996 45517937 53008497 48179451 47964156 42155259 47184755 267...
output:
137137494 130644721 122461248 136098437 133900842 139971148 126044470 123400935 132294341 130564235 131577353 139222968 134134442 139111260 143826886 137816035 143317006 139132099 126640855 134620873 139716994 141756406 141850936 136210410 131757247 136204948 139617130 144560973 142272557 138851244 ...
result:
wrong answer 8463rd numbers differ - expected: '0', found: '-1'