@[Isaunoya](/user/96580) 是不对,但A了
by Malody @ 2020-05-24 20:08:19
这样不好么。。
by 1saunoya @ 2020-05-24 20:08:29
拆的也不对好吧。。。
by 1saunoya @ 2020-05-24 20:09:03
@[Isaunoya](/user/96580) 对啊,是错的,但A了,所以数据有误
by Malody @ 2020-05-24 20:09:35
@[Isaunoya](/user/96580) 我说的是
同时谴责出题人,我的代码二进制没拆完也A了
by Malody @ 2020-05-24 20:10:06
@[我∈蒟蒻](/user/334548) /youl 数据有误的意思是这个输入不应该是这个输出,而不是数据水,另外我前面发过一个正确的代码,建议学习一下怎么用 bitset /youl
by 1saunoya @ 2020-05-24 20:10:32
@[我∈蒟蒻](/user/334548) 你拆的复杂度也有问题好么。。
by 1saunoya @ 2020-05-24 20:10:47
@[Isaunoya](/user/96580) 那就是强度不够……
by Malody @ 2020-05-24 20:11:10
草泥马
by Malody @ 2020-05-24 20:19:50
@[我∈蒟蒻](/user/334548) 为什么要用bitset或者bool数组,int不也能过?
```cpp// P6567 [NOI Online #3 入门组]买表(民间数据)
#include <cstdio>
#include <iostream>
#define MN 500005
using namespace std;
inline int read() {
int 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;
}
int n, m, f[MN], a[MN], k[MN], mx, q[MN];
int main() {
n = read(), m = read(), f[0] = 1;
for (int i = 0; i < n; i++) k[i] = read(), a[i] = read();
for (int i = 0; i < m; i++) mx = max(mx, (q[i] = read()));
for (int i = 0; i < n; i++) {
int now = 1, temp = a[i];
while (1)
if (temp > now) {
temp -= now;
for (int j = mx; j >= now * k[i]; j--)
if (f[j - now * k[i]]) f[j] = 1;
now *= 2;
} else {
for (int j = mx; j >= temp * k[i]; j--)
if (f[j - temp * k[i]]) f[j] = 1;
break;
}
}
for (int i = 0; i < m; i++) printf("%s", f[q[i]] ? "Yes\n" : "No\n");
return 0;
}
```
by wtxy2006 @ 2020-05-24 20:51:38