hdu 6085 Rikka with Candies

来源:互联网 发布:折八百淘宝商城马甲 编辑:程序博客网 时间:2024/06/07 10:13

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;}




原创粉丝点击