HDU 5638 Transform 搜索
Posted shuguangzw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5638 Transform 搜索相关的知识,希望对你有一定的参考价值。
题意:bc round 74 div1 1002 中文题
分析(官方题解):注意到答案实际上只和s⊕t有关, 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; }
以上是关于HDU 5638 Transform 搜索的主要内容,如果未能解决你的问题,请参考以下文章
HDU5638 / BestCoder Round #74 (div.1) 1003 Toposort 线段树+拓扑排序