Description
Input
Output
Sample Input
3 USDollar BritishPound FrenchFranc 3 USDollar 0.5 BritishPound BritishPound 10.0 FrenchFranc FrenchFranc 0.21 USDollar 3 USDollar BritishPound FrenchFranc 6 USDollar 0.5 BritishPound USDollar 4.9 FrenchFranc BritishPound 10.0 FrenchFranc BritishPound 1.99 USDollar FrenchFranc 0.09 BritishPound FrenchFranc 0.19 USDollar 0
Sample Output
Case 1: Yes Case 2: No
这是一个货币交换问题,就是问你货币交换之后能不能赚到钱,我用matrix数组存储,matrix[i][i]存储的是第I种货币交换若干次得到的第I种货币的比率,如果大于1就赚了,否则没有赚;
这个题解法就是用Floyed求最大回报,我这个人比较挫吧,调了几次才AC;
LANGUEGE:C++
CODE:
#include<stdio.h> #include<string.h> #define maxn 1001 char name[32][32]; int n,m; double matrix[maxn][maxn]; void reback(char s[],char s1[],int &x,int &y) { int cnt; for(int i=1,cnt=0;i<=n;i++) { if(strcmp(s,name[i])==0) { x=i;cnt++; } if(strcmp(s1,name[i])==0) { y=i;cnt++; } if(cnt==2)break; } } int main() { // freopen("in.txt","r",stdin); char s1[32],s2[32],flag; double t; int x,y,count=1; while(scanf("%d",&n)!=EOF&&n) { for(int i=1;i<=n;i++) { scanf("%s",name[i]); } flag=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) matrix[i][j]=i==j?1:0; scanf("%d",&m); while(m--) { scanf("%s%lf%s",s1,&t,s2); reback(s1,s2,x,y); // printf("x:%d y:%d\n",x,y); matrix[x][y]=t; } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) for(int k=1;k<=n;k++) if(matrix[j][k]<matrix[j][i]*matrix[i][k]) matrix[j][k]=matrix[j][i]*matrix[i][k]; // for(int i=1;i<=n;i++) // for(int j=1;j<=n;j++) // printf("%d %d:%lf\n",i,j,matrix[i][j]); for(int i=1;i<=n;i++) if(matrix[i][i]>1) { flag=1;break; //printf("YES\n"); //continue; } if(flag)printf("Case %d: Yes\n",count++); else printf("Case %d: No\n",count++); } return 0; }