QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#940391 | #9614. 分治 | Str_ywr | 75 | 44ms | 12640kb | C++14 | 3.7kb | 2025-03-17 19:13:33 | 2025-03-17 19:13:52 |
Judging History
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的方案
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;
// }
// } return sum;
}
// ll sum = 0;
for (int m = st + 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);
ss.insert(max(k, mx));
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: 3ms
memory: 12104kb
input:
110
output:
15
result:
ok 1 number(s): "15"
Test #2:
score: 10
Accepted
time: 2ms
memory: 10824kb
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: 11212kb
input:
111110
output:
198
result:
ok 1 number(s): "198"
Test #4:
score: 10
Accepted
time: 3ms
memory: 12468kb
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: 5ms
memory: 12292kb
input:
10100011000100111
output:
386882
result:
ok 1 number(s): "386882"
Test #6:
score: 20
Accepted
time: 4ms
memory: 11472kb
input:
111010011111010110
output:
1107742
result:
ok 1 number(s): "1107742"
Subtask #4:
score: 5
Accepted
Test #7:
score: 5
Accepted
time: 4ms
memory: 10828kb
input:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
output:
412796008
result:
ok 1 number(s): "412796008"
Test #8:
score: 5
Accepted
time: 4ms
memory: 11176kb
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: 2ms
memory: 11304kb
input:
10000000100000010010011110111101101110000000000001100000011000111111010011010101010000101001110110010001100110000110111101000101001111101111001010001001011101011111010000100010111100110000001101111
output:
703266161
result:
ok 1 number(s): "703266161"
Test #10:
score: 5
Accepted
time: 5ms
memory: 12640kb
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: 3ms
memory: 11604kb
input:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
340672883
result:
ok 1 number(s): "340672883"
Test #12:
score: 5
Accepted
time: 3ms
memory: 11728kb
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: 44ms
memory: 11804kb
input:
110011100110101000000110101010111111001101101011010110100100110010111110110110000111011001110000101111110111011111000110001011011011101100001100100011010010111111010110010000101001001000100001100100000001000111110100000101001011100001100011011110110101101111110011100111001010001010001111001110111100...
output:
324123594
result:
ok 1 number(s): "324123594"
Test #14:
score: 10
Accepted
time: 44ms
memory: 12524kb
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: 17ms
memory: 11332kb
input:
100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
468567454
result:
ok 1 number(s): "468567454"
Test #16:
score: 10
Accepted
time: 35ms
memory: 12108kb
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: 43ms
memory: 12156kb
input:
101100010100101011010110001111101101001010000111001111000100110110010111101100011011011111010110000000011110000010100110111110110001101001101101001110101110011000010100100101000011000010000101011001011011000000100111011110100010000100001101011110100101110000100011000101100000111111100110000111010000...
output:
725633130
result:
wrong answer 1st numbers differ - expected: '711712397', found: '725633130'