HDU 5638 Transform 搜索

Posted shuguangzw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5638 Transform 搜索相关的知识,希望对你有一定的参考价值。

题意:bc round 74 div1 1002 中文题

分析(官方题解):注意到答案实际上只和st有关, bfs预处理下从0到xx的最短步数, 然后查询O(1)回答即可.

 

技术分享
#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
#include <cmath>
using namespace std;
typedef long long LL;
const int mod=1e9+7;
const int N=2e5+5;
vector<int>a;
queue<int>q;
int p[N];
int main()
{
    int T,n,m;
    scanf("%d", &T);
    while(T--)
    {
        scanf("%d%d",&n,&m);
        a.clear();
        for(int i=0;i<n;++i)
        {
            int tmp;
            scanf("%d",&tmp);
            a.push_back(tmp);
        }
        int l=log2(N);
        l++;
        for(int i=0;i<=l;++i)
           a.push_back((1<<i));
        memset(p,-1,sizeof(p));
        q.push(0);
        p[0]=0;
        while(!q.empty())
        {
            int x=q.front();
            q.pop();
            for(int i=0;i<a.size();++i)
            {
                int y=(x^a[i]);
                if(y>N-5||p[y]!=-1)continue;
                p[y]=p[x]+1;
                q.push(y);
            }
        }
        LL ans=0;
        for(int i=1;i<=m;++i)
        {
            int s,t;
            scanf("%d%d",&s,&t);
            LL x=i,y=p[s^t];
            ans=(ans+x*y%mod)%mod;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}
View Code

 

以上是关于HDU 5638 Transform 搜索的主要内容,如果未能解决你的问题,请参考以下文章

HDU 5638 Toposort 线段树+贪心

HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序

hdu-5637 Transform(位运算+bfs)

hdu 1316 How Many Fibs?

警惕Apache Struts2最新(CVE-2017-5638,S02-45)漏洞

题解 AT5638 November 30