#include <bits/stdc++.h>
using namespace std;
void add_n(const unsigned *a, int n, unsigned *b) {
int i = 0;
for (; i < n - 7; i += 8) {
*b++ += *a++;
*b++ += *a++;
*b++ += *a++;
*b++ += *a++;
*b++ += *a++;
*b++ += *a++;
*b++ += *a++;
*b++ += *a++;
}
for (; i < n; ++i) {
b[i] += a[i];
}
}
unsigned solve(int n, char *s) {
int nsz = 1;
unsigned *dp = new unsigned[n / 2 + 1]();
unsigned *pd = new unsigned[n / 2 + 1];
dp[0] = 1;
for (int i = 0; i < n; ++i) {
int sz = min(i + 1, n - i - 1) / 2 + 1;
if (s[i] != ')') {
if (i & 1) {
copy_n(dp, min(nsz, sz - 1), pd + 1);
pd[0] = 0;
fill(pd + min(nsz + 1, sz), pd + sz, 0);
} else {
copy_n(dp, min(nsz, sz), pd);
fill(pd + min(nsz, sz), pd + sz, 0);
}
} else {
fill_n(pd, sz, 0);
}
if (s[i] != '(') {
if (i & 1) {
add_n(dp, min(sz, nsz), pd);
} else {
add_n(dp + 1, min(nsz - 1, sz), pd);
}
}
swap(pd, dp);
nsz = sz;
}
return dp[0];
}
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Testcase #1 | 113.17 us | 32 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #2 | 807.146 ms | 616 KB | Wrong Answer | Score: 0 | 显示更多 |
| Testcase #3 | 3 s | 1 MB + 100 KB | Time Limit Exceeded | Score: 0 | 显示更多 |
| Testcase #4 | 3 s | 1 MB + 304 KB | Time Limit Exceeded | Score: 0 | 显示更多 |