QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#940463#9614. 分治Str_ywr75 109ms15504kbC++144.1kb2025-03-17 19:45:302025-03-17 19:45:31

Judging History

This is the latest submission verdict.

  • [2025-03-17 19:45:31]
  • Judged
  • Verdict: 75
  • Time: 109ms
  • Memory: 15504kb
  • [2025-03-17 19:45:30]
  • 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], g[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的方案
        if (sub2::n > 2e3) return 0;
            for (int m = 1; m <= st; 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;
                }
            } 
        // }
        // 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; set<int> ss;
        for (int i = 1; i < n; i++) {
            if (s[i] == '1') {
                int k = (t == 1 ? las + 1 : 1);
                if (ss.insert(max(k, mx)).second) {
                    for (int j = 1; j <= sqrt(mx); j++) {
                        f[1] = 1; g[1] = 1;
                        for (int i = 2; i <= n; i++) {
                            f[i] = (2 * f[i-1] + f[i-2] + C(n, i) + C(n-j,i)) % mod;
                        }
                        for (int i = 2; i <= n; i++) {
                            g[i] = (3 * g[i-1] + g[i-2] + C(n, i) + C(n-j,i)) % mod;
                        }
                    }
                }
                assert(ss.size() <= 30);
                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: 5ms
memory: 13996kb

input:

110

output:

15

result:

ok 1 number(s): "15"

Test #2:

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

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: 3ms
memory: 14544kb

input:

111110

output:

198

result:

ok 1 number(s): "198"

Test #4:

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

input:

1001001

output:

253

result:

ok 1 number(s): "253"

Subtask #3:

score: 20
Accepted

Dependency #2:

100%
Accepted

Test #5:

score: 20
Accepted
time: 4ms
memory: 14588kb

input:

10100011000100111

output:

386882

result:

ok 1 number(s): "386882"

Test #6:

score: 20
Accepted
time: 2ms
memory: 14012kb

input:

111010011111010110

output:

1107742

result:

ok 1 number(s): "1107742"

Subtask #4:

score: 5
Accepted

Test #7:

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

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

output:

412796008

result:

ok 1 number(s): "412796008"

Test #8:

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

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

output:

818656648

result:

ok 1 number(s): "818656648"

Subtask #5:

score: 5
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Test #9:

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

input:

10000000100000010010011110111101101110000000000001100000011000111111010011010101010000101001110110010001100110000110111101000101001111101111001010001001011101011111010000100010111100110000001101111

output:

703266161

result:

ok 1 number(s): "703266161"

Test #10:

score: 5
Accepted
time: 2ms
memory: 13144kb

input:

110100000100001000101000010010101000110111101010110000101001001100100111000011100101110110010000001111010011101001111110110010001110011101001111010101100100010011101010101111111111010110001100100110

output:

330527406

result:

ok 1 number(s): "330527406"

Subtask #6:

score: 5
Accepted

Dependency #4:

100%
Accepted

Test #11:

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

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

340672883

result:

ok 1 number(s): "340672883"

Test #12:

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

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

555946758

result:

ok 1 number(s): "555946758"

Subtask #7:

score: 10
Accepted

Dependency #5:

100%
Accepted

Dependency #6:

100%
Accepted

Test #13:

score: 10
Accepted
time: 79ms
memory: 13512kb

input:

110011100110101000000110101010111111001101101011010110100100110010111110110110000111011001110000101111110111011111000110001011011011101100001100100011010010111111010110010000101001001000100001100100000001000111110100000101001011100001100011011110110101101111110011100111001010001010001111001110111100...

output:

324123594

result:

ok 1 number(s): "324123594"

Test #14:

score: 10
Accepted
time: 81ms
memory: 14652kb

input:

110100110100110110001011100000011010000010000101100100001101100100110000101000111001111100001110001001101010110010111101000100111010001011001110101010001101111010000011000010110011000011100101110100000001011100111000101111010100001101011010100101110000010001101001000100111001101101110000101101011011...

output:

209285599

result:

ok 1 number(s): "209285599"

Subtask #8:

score: 10
Accepted

Dependency #6:

100%
Accepted

Test #15:

score: 10
Accepted
time: 19ms
memory: 12088kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

468567454

result:

ok 1 number(s): "468567454"

Test #16:

score: 10
Accepted
time: 33ms
memory: 11668kb

input:

100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

output:

12752860

result:

ok 1 number(s): "12752860"

Subtask #9:

score: 0
Wrong Answer

Dependency #1:

100%
Accepted

Dependency #2:

100%
Accepted

Dependency #3:

100%
Accepted

Dependency #4:

100%
Accepted

Dependency #5:

100%
Accepted

Dependency #6:

100%
Accepted

Dependency #7:

100%
Accepted

Dependency #8:

100%
Accepted

Test #17:

score: 0
Wrong Answer
time: 109ms
memory: 15504kb

input:

101100010100101011010110001111101101001010000111001111000100110110010111101100011011011111010110000000011110000010100110111110110001101001101101001110101110011000010100100101000011000010000101011001011011000000100111011110100010000100001101011110100101110000100011000101100000111111100110000111010000...

output:

725633130

result:

wrong answer 1st numbers differ - expected: '711712397', found: '725633130'