bitset怎么鬼?,还有这种操作?
百度一波bitset,这种操作令人窒息。
首先思路:如果a%b==k b肯定大于k,不用想的事情,所以从最大的b开始枚举。
a%b=k 就是a-b*j=k,就是a-k=b*j
所以:
#include <bits/stdc++.h>
using namespace std;
const int N =50000+5;
bitset<N>a,b,ans,bx;
void solve(int x)
{
bx.reset();
for(int i=x;i>=0;i--)
{
ans[i]=((a>>i)&bx).count()&1;//a-k=b*j一共有多少组,这种操作令我窒息
if(!b[i]) continue;
for(int j=0;j<N;j+=i)
bx.flip(j);
}
return ;
}
int main()
{
int t;
scanf("%d", &t);
while(t--)
{
a.reset(),b.reset();
int n, m, q, x, maxt=0;
scanf("%d %d %d", &n, &m, &q);
for(int i=0;i<n;i++)
{
scanf("%d", &x);
a.set(x);
}
for(int i=0;i<m;i++)
{
scanf("%d", &x);
b.set(x);
maxt=max(x,maxt);
}
ans.reset();
solve(maxt);
while(q--)
{
scanf("%d", &x);
if(ans[x])puts("1");
else puts("0");
}
}
return 0;
}