题目大意 :套利是利用货币汇率的差异,将一个货币单位转换成同一货币的一个以上的单位。例如,假设1美元买0.5英镑,1英镑买10法郎,而1法国法郎购买0.21美元。然后,通过转换货币,一个聪明的交易者可以从1美元和购买0.5 * 10 * 0.21 = 1.05美元,使利润为百分之5美元。
你的工作是写一个程序,以货币汇率的列表作为输入,然后确定是否套利是可能的。
用map建图,floyd
#include<stdio.h> #include<string> #include<map> using namespace std; map<string,int>mp; double a[40][40]; int n; void addEdge(char str1[],double x,char str2[]) { string s1=str1; string s2=str2; int u,v; u=mp[s1]; v=mp[s2]; a[u][v]=x; } bool floyd() { int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(a[i][j]<a[i][k]*a[k][j]) { a[i][j]=a[i][k]*a[k][j]; } } for(i=1;i<=n;i++) { if(a[i][i]>1) return true; } return false; } int main() { int m,i,j,count,t=0; double x; char str[20],str1[20],str2[20]; while(scanf("%d",&n)&&n) { count=0; mp.clear(); getchar(); for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(i==j) a[i][j]=1; else a[i][j]=0; } for(i=0;i<n;i++) { scanf("%s",str); string s=str; mp[s]=++count; } scanf("%d",&m); getchar(); for(i=0;i<m;i++) { scanf("%s%lf%s",str1,&x,str2); addEdge(str1,x,str2); } if(floyd()) printf("Case %d: Yes\n",++t); else printf("Case %d: No\n",++t); } return 0; }
NYOJ 188 Arbitrage map 建图 汇率转换
最新推荐文章于 2020-07-23 22:13:16 发布