zoukankan      html  css  js  c++  java
  • Rikka with Candies HDU 6085

    其实这种中档的问题,要是好好思考的话还是可以想出来的就是要深入的思考,实在不行就改变一下思路。

    这个书写bitset的模板还是应该好好的记住的,真的感觉不错。

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #include<iostream>
    #include<bitset>
    #include<set>
    #include<vector>
    
    using namespace std;
    const int N=6e4+32;
    vector<int>G[N];
    set<int>S;
    int vis[N],a[N],b[N],res[N];
    long long dig[N][50];
    long long ans[N];
    void inist(int r)
    {
        for(int i=1;i<=r;i++)
        {
            for(int j=1;j*j<=i;j++)
            {
                if(i%j) continue;
                if(i%j==0)
                {
                    G[i].push_back(j);
                    if(i/j!=j) G[i].push_back(i/j);
                }
            }
            //sort(G[i].begin(),G[i].end());
        }
    
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        inist(N-2);
        while(T--)
        {
            S.clear();
            int n,m,q;
            int maxn_date=0;
            scanf("%d%d%d",&n,&m,&q);
            memset(ans,0,sizeof(ans));
            memset(dig,0,sizeof(dig));
            memset(res,0,sizeof(res));
            memset(vis,0,sizeof(vis));
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&a[i]);
                vis[a[i]]=1;
                maxn_date=max(maxn_date,a[i]);
            }
            for(int i=1;i<=m;i++)
            {
                scanf("%d",&b[i]);
                S.insert(b[i]);
            }
            sort(b+1,b+1+m);
            for(int i=1;i<N-100;i++)
            {
                long long su=0;
                for(int j=0;j<32;j++)
                {
                    su=su*2+vis[i+j];
                    dig[i][j+1]=su;
                    dig[i][j+1]<<=(31-j);
                }
            }
    
            for(int i=1;i<=maxn_date;i++)
            {
                int sz=G[i].size();
                for(int j=0;j<sz;j++)
                {
                    int x=G[i][j];
                    if(!S.count(x))continue;
                    int L=0,R=x-1;
                    while(L<=R)
                    {
                        int d=L/32;
                        if(i+L>N-100) break;
                        if(L+31<=R)
                        {
                            ans[d]^=dig[i+L][32];
                            L+=32;
                        }
                        else
                        {
                            ans[d]^=dig[i+L][R-L+1];
                            L=R+1;
                        }
                    }
                }
            }
            for(int i=0;i*32<=5e4+50;i++)
            {
                int j=(i+1)*32-1;
                int t=32;
                while(t--)
                {
                    res[j]=ans[i]&1; j--;
                    ans[i]>>=1;
                }
            }
            for(int i=1;i<=n;i++)
            {
               int  x=a[i];
               res[x]+=m-(upper_bound(b+1,b+1+m,x)-(b+1));
            }
            while(q--)
            {
                int k;
                scanf("%d",&k);
                printf("%d
    ",res[k]&1);
            }
        }
    }
    

      

  • 相关阅读:
    怎样处理人际关系中的矛盾
    如何处理人际关系
    Python包含以下函数:
    与他人有效沟通的小技巧
    沟通时容易出现的问题
    如何在工作中提升自己
    第十三周进度报告
    第十二周学习进度
    团队绩效管理
    软件对标分析
  • 原文地址:https://www.cnblogs.com/Heilce/p/7336913.html
Copyright © 2011-2022 走看看