QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#939380 | #9614. 分治 | Str_ywr | 40 | 34ms | 12660kb | C++14 | 3.0kb | 2025-03-17 12:37:31 | 2025-03-17 12:37:39 |
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的方案
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%