QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#66906 | #5169. 夹娃娃 | 10circle | Compile Error | / | / | C++14 | 4.6kb | 2022-12-09 12:29:52 | 2022-12-09 12:30:01 |
Judging History
你现在查看的是最新测评结果
- [2023-08-10 23:21:45]
- System Update: QOJ starts to keep a history of the judgings of all the submissions.
- [2022-12-09 12:30:01]
- 评测
- 测评结果:Compile Error
- 用时:0ms
- 内存:0kb
- [2022-12-09 12:29:52]
- 提交
answer
// 哈哈,不认识“娃”这个字了。
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vint;
int read() {
int a = 0, b = 0; char c = getchar();
while (c < '0' || c > '9') b ^= (c == '-'), c = getchar();
while (c >= '0' && c <= '9') a = a * 10 - 48 + c, c = getchar();
return b ? -a : a;
}
const int N = 15, V = 1024 << 1, Vp = 521;
const int mod = 998244353, G = 3, iG = 332748118;
int n, q, f[N][V], vf[N][Vp][V];
void Add(int &a, int b) { if ((a += b) >= mod) a -= mod; }
void Sub(int &a, int b) { if ((a -= b) < 0) a += mod; }
int add(int a, int b) { return (a + b >= mod) ? a + b - mod : a + b; }
int sub(int a, int b) { return a - b < 0 ? a - b + mod : a - b; }
void Fav(int &a, int b, int c) { a = (a + (ll)b * c) % mod; }
void Mul(int &a, int b) { a = (ll)a * b % mod; }
int mul(int a, int b) { return (ll)a * b % mod; }
int pw(ll a, int k) { ll s = 1; while (k) { if (k & 1) s = s * a % mod; a = a * a % mod; k >>= 1; } return s; }
int rv[V];
void init() {
for (int i = 1; i < V; ++i) rv[i] = (rv[i >> 1] >> 1) | ((i & 1) ? (V >> 1) : 0);
}
void NTT(int f[], int ag = 1) {
for (int i = 0; i < V; ++i) if (i < rv[i]) swap(f[i], f[rv[i]]);
for (int k = 2; k <= V; k <<= 1) {
int rk = k >> 1, w = pw(G, (mod - 1) / k);
for (int i = 0; i < V; i += k) {
int r = 1;
for (int j = i; j < i + rk; ++j) {
int g = mul(f[j + rk], r);
f[j + rk] = sub(f[j], g);
Add(f[j], g);
Mul(r, w);
}
}
}
if (!ag) {
int iV = pw(V, mod - 2);
reverse(f + 1, f + V);
for (int i = 0; i < V; ++i) Mul(f[i], iV);
}
}
void mulp(int f[], int g[]) {
static int h[V];
memset(h, 0, sizeof h);
for (int v1 = 0; v1 < V; ++v1) {
for (int v2 = 0; v1 + v2 < V; ++v2) {
Fav(h[v1 + v2], f[v1], g[v2]);
}
}
for (int i = 0; i < V; ++i) cout << g[i] << ' '; cout << '\n';
for (int i = 0; i < V; ++i) cout << f[i] << ' '; cout << '\n';
for (int i = 0; i < V; ++i) cout << h[i] << ' '; cout << '\n';
NTT(g);
NTT(f);
for (int i = 0; i < V; ++i) Mul(g[i], f[i]);
NTT(g, 0);
NTT(f, 0);
for (int i = 0; i < V; ++i) cout << g[i] << ' '; cout << '\n';
cout << '\n';
}
int F[128][521][V];
void pre() {
for (int v = 0; v < (1 << n); ++v) {
for (int k = 1; k <= 520; ++k) {
if (v == 0) for (int o = 0; o < V; ++o) F[v][k][o] = 1;
for (int nw = n - 1; nw >= 0; --nw) if (!((v >> nw) & 1)) {
int u = v | (1 << nw);
for (int o = 0; o < V; ++o) F[u][k][o] = mul(F[v][k][o], vf[nw][k][o]);
} else break;
NTT(F[v][k], 0);
}
}
}
void sol1() {
static int a[N], b[N], c[N];
for (int i = 0; i < n; ++i) a[i] = read(), b[i] = read(), c[i] = read();
while (q--) {
char s[20];
int m, K;
scanf("%s%d%d", s, &m, &K);
static int f[Vp], g[Vp];
memset(f, 0, sizeof f); memset(g, 0, sizeof g);
f[0] = 1;
for (int i = 0; i < n; ++i) {
for (int k = 0; k < Vp; ++k) g[k] = add(f[k], (k >= b[i] ? g[k - b[i]] : 0));
if (s[i] == '1') {
int mc = K / b + bool(K % b);
if (mc > c) {
memset(f, 0, sizeof f);
continue;
}
for (int k = 0; k < Vp; ++k) {
f[k] = sub((k >= b[i] * mc ? g[k - b[i] * mc] : 0),
(k >= b[i] * (c[i] + 1) ? g[k - b[i] * (c[i] + 1)] : 0));
}
} else{
for (int k = 0; k < Vp; ++k) f[k] = sub(g[k], (k >= b[i] * (c[i] + 1) ? g[k - b[i] * (c[i] + 1)] : 0));
}
}
int ans = 0;
for (int j = 0; j <= m; ++j) Add(ans, f[j]);
cout << ans << '\n';
}
exit(0);
}
int main() {
// freopen("a.in", "r", stdin);
// freopen("a.out", "w", stdout);
init();
n = read(), q = read();
read();
if (n > 4) sol1();
// mod = read();
for (int i = 0; i < n; ++i) {
int a = read();
f[i][0] = 1;
for (int r = 0; r < a; ++r) {
int b = read(), c = read();
static int g[V];
for (int k = 0; k < Vp; ++k) g[k] = add(f[i][k], (k >= b ? g[k - b] : 0));
for (int k = 0; k < Vp; ++k) f[i][k] = sub(g[k], (k >= b * (c + 1) ? g[k - b * (c + 1)] : 0));
}
memcpy(vf[i][0], f[i], V << 2);
for (int k = 0; k < Vp - 1; ++k) {
memcpy(vf[i][k + 1] + k + 1, vf[i][k] + k + 1, (V - k - 1) << 2);
NTT(vf[i][k]);
}
NTT(vf[i][520]);
}
pre();
for (int i = 0; i < q; ++i) {
char s[20];
int m, k, v = 0;
scanf("%s%d%d", s, &m, &k);
for (int j = 0; j < n; ++j) if (s[j] == '1') v |= 1 << j;
int lw = k * __builtin_popcount(v);
if (lw > m) {
cout << 0 << '\n';
continue;
}
int ans = 0;
for (int j = 0; j <= m; ++j) Add(ans, F[v][k][j]);
cout << ans << '\n';
}
return 0;
}
Details
answer.code: In function ‘void sol1()’: answer.code:111:44: error: invalid operands of types ‘int’ and ‘int [15]’ to binary ‘operator/’ 111 | int mc = K / b + bool(K % b); | ~ ^ ~ | | | | int int [15] answer.code:111:57: error: invalid operands of types ‘int’ and ‘int [15]’ to binary ‘operator%’ 111 | int mc = K / b + bool(K % b); | ~ ^ ~ | | | | int int [15] answer.code:112:40: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] 112 | if (mc > c) { | ~~~^~~ answer.code:104:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 104 | scanf("%s%d%d", s, &m, &K); | ~~~~~^~~~~~~~~~~~~~~~~~~~~ answer.code: In function ‘int main()’: answer.code:162:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 162 | scanf("%s%d%d", s, &m, &k); | ~~~~~^~~~~~~~~~~~~~~~~~~~~