hdoj1217 Arbitrage
2015-08-11 19:58
405 查看
Arbitrage
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5598 Accepted Submission(s): 2605
Problem Description
Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Dollar buys 0.5 British pound, 1 British pound buys
10.0 French francs, and 1 French franc buys 0.21 US dollar. Then, by converting currencies, a clever trader can start with 1 US dollar and buy 0.5 * 10.0 * 0.21 = 1.05 US dollars, making a profit of 5 percent.
Your job is to write a program that takes a list of currency exchange rates as input and then determines whether arbitrage is possible or not.
Input
The input file will contain one or more test cases. Om the first line of each test case there is an integer n (1<=n<=30), representing the number of different currencies. The next n lines each contain the name of one currency. Within
a name no spaces will appear. The next line contains one integer m, representing the length of the table to follow. The last m lines each contain the name ci of a source currency, a real number rij which represents the exchange rate from ci to cj and a name
cj of the destination currency. Exchanges which do not appear in the table are impossible.
Test cases are separated from each other by a blank line. Input is terminated by a value of zero (0) for n.
Output
For each test case, print one line telling whether arbitrage is possible or not in the format "Case case: Yes" respectively "Case case: No".
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这道题最主要是建图,将字符串标记成数字是关键! 例如:USDollar 0.5 BritishPound 转化为: 1 0.5 2 BritishPound 10.0 FrenchFranc 转化为: 2 10.0 3 FrenchFranc 0.21 USDollar 转化为: 3 10.0 1 来 ,看代码:#include<stdio.h> #include<string.h> #define ac 110 double map[ac][ac]; int t=1; int country; void floyd() { int i,j,k,exist=0; for(k=1;k<=country;k++)//floyd for(i=1;i<=country;i++) for(j=1;j<=country;j++) { if(map[i][j]<map[i][k]*map[k][j]) map[i][j]=map[i][k]*map[k][j]; } for(i=1;i<=country;i++)//判断是否赚钱 { if(map[i][i]>1) { exist=1; break; } } if(exist) printf("Case %d: Yes\n",t++); else printf("Case %d: No\n",t++); } int main() { int i,j,n,k,u; double rate; char a[1000],b[1000],c[1000][1000]; while(scanf("%d",&country)!=EOF&&country!=0) { for(i=1;i<=country;i++) for(j=1;j<=country;j++) { map[i][j]=0; } for(i=1;i<=country;i++) { scanf("%s",c[i]); } scanf("%d",&n); for(j=1;j<=n;j++)//建图 { scanf("%s %lf %s",a,&rate,b); for(i=1;i<=country;i++) { if(strcmp(c[i],a)==0) { k=i; break; } } for(i=1;i<=country;i++) { if(strcmp(c[i],b)==0) { u=i; break; } } map[k][u]=rate; } floyd(); } return 0; }原题目:hdoj1217 Arbitrage
相关文章推荐
- java微信开发发送消息
- Text 绑定
- Java——线程
- HDU 5375 Gray code
- Java基础-多线程
- Elasticsearch集群环境的搭建步骤
- 32位和64位系统区别及常用数据类型所占字节数
- python学习笔记3
- Request Flow for Provisioning Instance in Openstack
- (3.1.4.2)struts1和struts2
- iOS 多线程使用
- 复盘:一个创业项目的失败之路
- 05-图3. 六度空间 (30) floyd bfs
- HDU 5373 The shortest problem
- MyEclipse10破解教程
- 王家林亲授《DT大数据梦工厂》第84讲:Scala中List和ListBuffer设计实现思考
- Hdu4135容斥原理
- gcc,gdb基础学习2
- 解决双系统问题,先安装win7,再安装ubuntu,发现ubuntu不能识别检测已经安装的win7,并且只能看到一整块硬盘的问题
- UVALive 4975 (LA 4975) Casting Spells Manacher + Set维护