标签:disco get 个数 nes each turn enter 题解 change
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 4810 | Accepted: 1287 | Special Judge |
Description
Input
Output
Sample Input
1 3 3 1 5 3 6 3 5 2 4 3
Sample Output
29.00
Hint
Source
1 #include<iostream> 2 #include<cstdio> 3 #include<queue> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 const int maxn=105; 8 const double Max_double=11258999068426240000; 9 bool exist[maxn][maxn]; 10 struct node{ 11 int x,y; 12 }; 13 node p; 14 double dis[maxn][maxn]; 15 int map[maxn][maxn],v,n,m; 16 int dir[][2]={{0,-1},{1,0},{0,1},{-1,0}}; 17 queue<node>q; 18 double SPFA(){ 19 p.y=1;p.x=1; 20 dis[1][1]=0;exist[1][1]=true; 21 q.push(p); 22 while(!q.empty()){ 23 p=q.front();q.pop(); 24 exist[p.x][p.y]=false; 25 double k=1.0/(v * pow(2, 1.0*(map[1][1]-map[p.x][p.y]))); 26 for(int i=0;i<4;i++){ 27 int nex=p.x+dir[i][0],ney=p.y+dir[i][1]; 28 if(nex>=1&&nex<=n&&ney>=1&&ney<=m){ 29 if(dis[nex][ney]>dis[p.x][p.y]+k){ 30 dis[nex][ney]=dis[p.x][p.y]+k; 31 if(exist[nex][ney]==false){ 32 node tmp; 33 tmp.x=nex;tmp.y=ney; 34 q.push(tmp);exist[nex][ney]=true; 35 } 36 } 37 } 38 } 39 } 40 return dis[n][m]; 41 } 42 int main() 43 { 44 scanf("%d%d%d",&v,&n,&m); 45 for(int i=1;i<=n;i++) 46 for(int j=1;j<=m;j++){ 47 scanf("%d",&map[i][j]);dis[i][j]=Max_double; 48 } 49 memset(exist,false,sizeof(exist)); 50 printf("%.2lf\n",SPFA()); 51 return 0; 52 }
注:上面标红色的那个数反正是要开到非常大,我刚开始开了一个15亿左右的数,以为够用了,却总是WA,还找不出错了,造了几组数据也没毛病,后来看了看题解,只是觉得这里稍小了点,其余的感觉差不多。。
思路:很简单,就是我不想翻译英文,看的别人博客里翻译的,才知道了K,之后就是SPFA();
标签:disco get 个数 nes each turn enter 题解 change
原文地址:http://www.cnblogs.com/suishiguang/p/6371575.html