标签:memset contains 博客 lib find enc mes tin har
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 1262 Accepted Submission(s): 224
bfs + 剪枝
剪枝:
1 #include <stdio.h> 2 #include <math.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <iostream> 6 #include <sstream> 7 #include <algorithm> 8 #include <string> 9 #include <queue> 10 #include <vector> 11 using namespace std; 12 const int maxn= 150000+10; 13 const int maxm= 1e4+10; 14 const int inf = 0x3f3f3f3f; 15 typedef long long ll; 16 ll ne[maxn]; //ne[i]为以i为起点的边的终点 17 int v[maxn],ans[maxn],vis[maxn]; //权值、答案、i上一次在ans数组中出现的位置 18 char s[maxn]; 19 int n,t; 20 struct node 21 { 22 int v,pos,ans; //表示当前节点的权值,下标i,在答案数组中的位置下标 23 node(){} 24 node(int v,int pos,int ans):v(v),pos(pos),ans(ans){} 25 }; 26 struct compare 27 { 28 bool operator()(const node &a,const node &b) const //ans最小值优先 权值最大值优先 29 { 30 if(a.ans!=b.ans) return a.ans>b.ans; 31 else if(a.v!=b.v) return a.v<b.v; 32 return a.pos>b.pos; 33 } 34 }; 35 priority_queue<node,vector<node>,compare> q; 36 int main() 37 { 38 scanf("%d",&t); 39 int kase=1; 40 while(t--) 41 { 42 scanf("%d",&n); 43 scanf("%s",s); 44 memset(vis,-1,sizeof(vis)); //初始化 45 memset(ans,-1,sizeof(ans)); 46 int ma=0; 47 for(int i=0;i<n;i++) //权值转化为整数 求出最大值 i的终点(i^2+1)%n 48 { 49 v[i]=s[i]-‘0‘; 50 ma=max(ma,v[i]); 51 ne[i]=(((ll)i*(ll)i+1)%(ll)n); 52 } 53 // for(int i=0;i<n;i++) 54 // { 55 // printf("%d %d %d\n",i,v[i],next[i]); 56 // } 57 // printf("%d\n",ma); 58 for(int i=0;i<n;i++) 59 { 60 if(v[i]==ma) 61 q.push(node(ma,i,0)); //最大值先压入队列 62 } 63 while(!q.empty()) 64 { 65 node t=q.top();q.pop(); 66 if(ans[t.ans]==-1) ans[t.ans]=t.v; //该位置初步确定一个值 67 if(ans[t.ans]>t.v) continue; //该节点的权值比以前小 直接跳过 68 if(vis[t.pos]<t.ans) vis[t.pos]=t.ans; //更新节点的 访问位置 69 else continue; 70 if(t.ans==n-1) continue; 71 q.push(node(v[ne[t.pos]],ne[t.pos],t.ans+1)); //加入新节点 72 } 73 printf("Case #%d: ",kase++); 74 for(int i=0;i<n;i++) 75 printf("%d",ans[i]); 76 printf("\n"); 77 } 78 return 0; 79 }
标签:memset contains 博客 lib find enc mes tin har
原文地址:http://www.cnblogs.com/stranger-/p/7841085.html