Rikka with Candies HDU

来源:互联网 发布:iphone和ipad软件同步 编辑:程序博客网 时间:2024/05/17 22:43
#include<bits/stdc++.h>#include<stdio.h>#include<algorithm>#include<queue>#include<string.h>#include<iostream>#include<math.h>#include<set>#include<map>#include<vector>#include<iomanip>using namespace std;#define ll long long#define pb push_back#define FOR(a) for(int i=1;i<=a;i++)const int inf=0x3f3f3f3f;const int maxn=5e4+9; const int mod=998244353;bitset<maxn>a,b,ans,bx;//ans[x]:模后为x的出现次数void solve(int x){//取余不会超过最大值xbx.reset();for(int i=x;i>=0;i--){//(a-i)%b==0ans[i]=((a>>i) & bx).count() & 1;//a>>i就是(a-i)的出现状况了if(!b[i])continue;for(int j=0;j<maxn;j+=i){bx.flip(j);//b[x]:b中元素倍数的出现次数//对于当前枚举的余数,只有更大的b的倍数才会生成//所以倒序枚举因子倍数}}}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=1;i<=n;i++){scanf("%d",&x);a.set(x);}for(int i=1;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");}}}
主要的思路都在注释里了
原创粉丝点击