Bus System 我对自己无语了。。wa了n次原来输出格式搞错了。唉。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define inf 0x7f7f7f7f7f7f7f7fLL __int64 map[110][110],cost[10],dis[10],sta[110]; int a,b,M,N,l=0; __int64 exp(__int64 x) { if(x==0) return 0; if(x>0&&x<=dis[1]) return cost[1]; else if(x<=dis[2]) return cost[2]; else if(x<=dis[3]) return cost[3]; else if(x<=dis[4]) return cost[4]; else return inf; } void floyd( ) { int i,j,k,t; for(k=1;k<=M;k++) for(i=1;i<=M;i++) for(j=1;j<=M;j++) { if(map[k][j]!=inf&&map[i][k]!=inf&&map[i][j]>map[i][k]+map[k][j]) map[i][j]=map[i][k]+map[k][j]; } } void print(int a,int b) { if(map[a][b]!=inf) printf("The minimum cost between station %d and station %d is %I64d.\n",a,b,map[a][b]); else printf("Station %d and station %d are not attainable.\n",a,b); } int main( ) { int P,i,j; scanf("%d",&N); while(N--) { l++; for(i=1;i<=4;i++) scanf("%I64d",&dis[i]); for(i=1;i<=4;i++) scanf("%I64d",&cost[i]); scanf("%d%d",&M,&P); for(i=1;i<=M;i++) scanf("%I64d",&sta[i]); for(i=1;i<=M;i++) for(j=i+1;j<=M;j++) map[i][j]=map[j][i]=exp(abs(sta[j]-sta[i])); floyd(); printf("Case %d:\n",l); for(i=1;i<=P;i++) { scanf("%d%d",&a,&b); print(a,b); //刚开始时这里超时,我把floy 函数放里面了。悲剧。 } } return 0; }
posted on 2011-05-01 20:18 more think, more gains 阅读(191) 评论(0) 编辑 收藏 举报