QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#847210#9920. Money Game 2jakerWA 41ms23284kbC++202.9kb2025-01-07 18:59:032025-01-07 18:59:07

Judging History

This is the latest submission verdict.

  • [2025-01-07 18:59:07]
  • Judged
  • Verdict: WA
  • Time: 41ms
  • Memory: 23284kb
  • [2025-01-07 18:59:03]
  • Submitted

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 );
            val[p] += (now + bit[p])/2;
            nxt = (nxt+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 <= 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 = ( nxt + 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];
        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 ;
}

詳細信息

Test #1:

score: 100
Accepted
time: 1ms
memory: 7776kb

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: 9828kb

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: 2ms
memory: 7716kb

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: 2ms
memory: 7724kb

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: -100
Wrong Answer
time: 41ms
memory: 23284kb

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:

3125174507338 378631160815 23297589896 722384058 11243248 87668 343 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

result:

wrong answer 1st numbers differ - expected: '4', found: '3125174507338'