QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#231072#7109. Traveling on the Axiscciafrino#AC ✓8ms4868kbC++202.1kb2023-10-29 00:30:082023-10-29 00:30:09

Judging History

你现在查看的是最新测评结果

  • [2023-10-29 00:30:09]
  • 评测
  • 测评结果:AC
  • 用时:8ms
  • 内存:4868kb
  • [2023-10-29 00:30:08]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;

using lint = int64_t;

lint solve(string s) {
    int N = (int) s.size();
    vector<lint> dp(N+1, 0);


    // for(int i=N-1; i>=0; i--) {
    //     if(s[i] == '1') { 
    //         dp[i] = dp_inv[i+1] + 1;
    //         dp_inv[i] = dp_inv[i+1] + 1 + 1;
    //     } else {
    //         dp[i] = dp[i+1] + 1 + 1;
    //         dp_inv[i] = dp[i+1] + 1;
    //     }
    // }
    
    lint cur_s = 0;
    for(int i=N-1; i>=0; i--) {
        if (i + 1 < N && s[i] == s[i + 1]) {
            cur_s += (N - i - 1);
        }
        int k = s[i] == '0';
        dp[i] = (i+1) * lint(i + 2) / 2;
        dp[i] += cur_s + dp[i + 1] + k * lint(N - i); 
    }

    // cout << dp[0] << endl;
    return dp[0];

    // cout << "pd: ";
    // for(auto p: dp) cout << p << " ";
    // cout << endl;

    // cout << "pd inv: ";
    // for(auto p: dp_inv) cout << p << " ";
    // cout << endl;

    // lint cont = 0;
    // for(int i=0; i<N; i++) {
    //     cont += dp[i] * (N-i);
    //     cout << i << " * " << (N-i) << endl;
    // }
    // cout << endl;

    // for(int i=0; i<N; i++) {
    //     if(s[i] == '1') { 
    //         cont -= ( dp_inv[i] ) * ( (i)/2 );
    //         cont -= ( dp[i] - 1 ) * ( (i+1)/2 );
    //     } else {
    //         cont -= ( dp[i] - 1 ) * ( (i)/2 );
    //         cont -= ( dp_inv[i] ) * ( (i+1)/2 );
    //     }
        // cout << i << " + " << (s[i] == '1' ? 1 : 0) << " ) * " << ( (i)/2 ) << endl;
    // }
    // cout << endl;

    // for(int i=0; i<N; i++) {
    //     cont -= ( dp[i] - (s[i] == '0' ? 1 : 0) ) * ( (i+1)/2);
    //     cout << i << " + " << (s[i] == '0' ? 1 : 0) << " ) * " << ( (i+1)/2 ) << endl;
    // }
    // cout << endl;

    // return cont;
}
// if (s == 1) dp(i) += dp(i-1) + 2
// else dp(i) += dp(i-1) + 1
// if (s_i == s_i+1) dp(i) += (i-1) * 2
// else dp(i) += (i-1) 
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int T; cin >> T;

    while (T--) {
        string s; cin >> s;
        cout << solve(s) << endl;    
    }
}

这程序好像有点Bug,我给组数据试试?

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

3
101
011
11010

output:

12
15
43

result:

ok 3 lines

Test #2:

score: 0
Accepted
time: 8ms
memory: 4868kb

input:

6107
1010101
010110100110101
1010
1010101010010101010
101011
0101101011010101010
0101101011
11011010101
010
1011010
10110101010101010100
010101010110101
10101010101011
0101010101010101011
00101010011000
1010101010010110110
01010101001010101010
101010101010101
100100101010101010
01
011
0101010100101
...

output:

96
889
24
1515
69
1567
279
345
14
106
1702
791
621
1447
764
1615
1755
736
1333
6
15
542
44
1689
1515
140
833
497
596
24
1640
694
462
30
425
14
1041
1446
96
504
124
75
560
970
771
945
6
1
321
137
786
720
206
769
46
103
225
74
554
2
100
529
260
207
197
2
197
1041
140
857
207
1
74
1604
41
343
1041
14
1...

result:

ok 6107 lines

Extra Test:

score: 0
Extra Test Passed