QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#939380#9614. 分治Str_ywr40 34ms12660kbC++143.0kb2025-03-17 12:37:312025-03-17 12:37:39

Judging History

This is the latest submission verdict.

  • [2025-03-17 12:37:39]
  • Judged
  • Verdict: 40
  • Time: 34ms
  • Memory: 12660kb
  • [2025-03-17 12:37:31]
  • Submitted

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read() {
    ll x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9') {
        if (ch == '-') f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9') {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    } return x * f;
}
const int N = 3e5 + 10, mod = 998244353, lm = 200; const ll inf = 1e18; 
ll jc[N], jcn[N], pw[N];
ll qpow(ll x, ll y) {
	ll ans = 1;
	while (y) {
		if (y & 1) ans = (ans * x) % mod;
		x = (x * x) % mod; y >>= 1;
	} return ans;
} string s;
ll C(int n, int m) {
    if (n < 0 || m < 0 || m > n) return 0;
    return jc[n] * jcn[m] % mod * jcn[n-m] % mod;
}
namespace sub1{
	int n;
	ll solve(int nn) {
        n = nn;
		ll sum = 0; n--;
		for (int m = 1; m <= n; m++) {
			for (int j = 1; j * m <= n; j++) {
				sum = (sum + ((j & 1) ? 1 : -1) * (C(n-j*m,j) * (n-j*m-j < 0 ? 0 : pw[n-j*m-j]) + C(n-j*m,j-1) * (n-j*m-j+1 < 0 ? 0 : pw[n-j*m-j+1]))) % mod; 
			}
		}
		sum = (sum % mod + mod) % mod;
        return sum;
	}
}
namespace sub2 {
    int n; ll f[N]; int mx, las, t;
    ll calc(int n, int k) {
        // !!!! n = 0?????
        int st = max(mx, k);
        // ll sum = st * qpow(2, n) % mod; //求>=k的方案
        ll sum = 0;
        for (int m = 1; m <= n + k; m++) {
            for (int j = 1; j <= n && j * m <= n; j++) {
                sum = (sum + ((j & 1) ? 1 : -1) * C(n-j*m, j) * (n-j*m-j < 0 ? 0 : pw[n-j*m-j])) % mod;
            }
            for (int j = 0; j <= n && j * m <= n; j++) {
                sum = (sum + ((j & 1) ? -1 : 1) * C(n-j*m-max(0,(m-k)), j) * (n-j*m-j-max(0,(m-k)) < 0 ? 0 : pw[n-j*m-j-max(0,(m-k))])) % mod;
            }
        } return sum;
    }
    void solve() {
        n = s.size(); ll sum = 0;
        for (int i = 0; i < n; i++) sum = (sum * 2 + s[i] - '0') % mod;
        sum += sub1::solve(n); sum %= mod;
        mx = 1, las = 1, t = 1;
        for (int i = 1; i < n; i++) {
            if (s[i] == '1') {
                int k = (t == 1 ? las + 1 : 1);
                sum = (sum + calc(n - i - 1, k)) % mod; 
            }
            // int k = t == 1 ? las + 1 : ;
            int nw = s[i] - '0'; nw ^= 1;
            if (nw == t) las++;
            else las = 1, t = nw;
            if (t == 1) mx = max(mx, las);
        }
        sum = (sum % mod + mod) % mod;
        cout << sum;
    }
}
int main() {
	// assert(__lg(0) == -1);
    cin >> s; bool fl = 1;
    for (int i = 0; i < s.size(); i++) {
        fl &= (!i || s[i] == '0');
    }
    jc[0] = jcn[0] = pw[0] = 1;
    for (int i = 1; i < N; i++) jc[i] = (jc[i-1] * i) % mod;
    for (int i = 1; i < N; i++) pw[i] = (pw[i-1] << 1) % mod;
    jcn[N-1] = qpow(jc[N-1], mod - 2);
    for (int i = N - 2; i >= 1; i--) {
        jcn[i] = (jcn[i+1] * (i + 1)) % mod;
    }
    sub2::solve();
    // if ((fl && s.size() > 7)) {
    // 	cout << sub1::solve(s.size()); return 0;
	// } else {
	// 	sub2::solve(); return 0;
	// }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 3ms
memory: 11852kb

input:

110

output:

15

result:

ok 1 number(s): "15"

Test #2:

score: 10
Accepted
time: 4ms
memory: 12644kb

input:

101

output:

12

result:

ok 1 number(s): "12"

Subtask #2:

score: 10
Accepted

Dependency #1:

100%
Accepted

Test #3:

score: 10
Accepted
time: 4ms
memory: 12172kb

input:

111110

output:

198

result:

ok 1 number(s): "198"

Test #4:

score: 10
Accepted
time: 5ms
memory: 12660kb

input:

1001001

output:

253

result:

ok 1 number(s): "253"

Subtask #3:

score: 0
Wrong Answer

Dependency #2:

100%
Accepted

Test #5:

score: 0
Wrong Answer
time: 4ms
memory: 11084kb

input:

10100011000100111

output:

386592

result:

wrong answer 1st numbers differ - expected: '386882', found: '386592'

Subtask #4:

score: 5
Accepted

Test #7:

score: 5
Accepted
time: 5ms
memory: 11468kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

output:

412796008

result:

ok 1 number(s): "412796008"

Test #8:

score: 5
Accepted
time: 4ms
memory: 11856kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

output:

818656648

result:

ok 1 number(s): "818656648"

Subtask #5:

score: 0
Skipped

Dependency #3:

0%

Subtask #6:

score: 5
Accepted

Dependency #4:

100%
Accepted

Test #11:

score: 5
Accepted
time: 4ms
memory: 10708kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

340672883

result:

ok 1 number(s): "340672883"

Test #12:

score: 5
Accepted
time: 3ms
memory: 11692kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

555946758

result:

ok 1 number(s): "555946758"

Subtask #7:

score: 0
Skipped

Dependency #5:

0%

Subtask #8:

score: 10
Accepted

Dependency #6:

100%
Accepted

Test #15:

score: 10
Accepted
time: 18ms
memory: 11572kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

468567454

result:

ok 1 number(s): "468567454"

Test #16:

score: 10
Accepted
time: 34ms
memory: 11300kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

12752860

result:

ok 1 number(s): "12752860"

Subtask #9:

score: 0
Skipped

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

0%