Arbitrage - poj 2240 (Bellman-ford)
2015-07-12 22:17
344 查看
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 17374 | Accepted: 7312 |
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 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 这题较简单,使用bellman-ford算法就可以了,注意输出,我因为输出WA几次
#include <iostream> #include<map> #include<string.h> using namespace std; struct edge{ int u,v; float rate; } e[40*40]; int cur_num,edge_num; float dis[40]; map<string,int> mp; int Bellman_ford(int c){ memset(dis,0,30*sizeof(float)); dis[c]=1.0; for(int i=0;i<cur_num;i++){ for(int j=0;j<edge_num;j++){ if(dis[e[j].v]<dis[e[j].u]*e[j].rate){ dis[e[j].v]=dis[e[j].u]*e[j].rate; } } } if(dis[c]>1.0) return 1; else return 0; } int main() { int count=0; cin>>cur_num; while(cur_num){ mp.clear(); for(int i=0;i<cur_num;i++){ string s; cin>>s; mp[s]=i; } cin>>edge_num; for(int i=0;i<edge_num;i++){ string s1,s2; float rate; cin>>s1>>rate>>s2; e[i].u=mp[s1]; e[i].v=mp[s2]; e[i].rate=rate; } int flag=0; for(int i=0;i<cur_num;i++){ flag=Bellman_ford(i); if(flag) break; } if(flag) cout<<"Case "<<++count<<": Yes"<<endl; else cout<<"Case "<<++count<<": No"<<endl; cin>>cur_num; } return 0; }
相关文章推荐
- Android中使用Handler造成内存泄露的分析和解决
- Unity5.1 新的网络引擎UNET(六) UNET Multiplayer Lobby
- Java之final的解析
- 文章标题
- AS 中配置强大的版本管理系统(Git、SVN、等)
- 剑指offer《面试题6:重建二叉树》
- Android4.4.2从内核logo到init logo到动态logo的分析及定制
- Swift 学习之路(一)
- 1083: [SCOI2005]繁忙的都市
- 27.跳台阶问题
- Unity5.1 新的网络引擎UNET(五) UNET Network Messages
- jdbcType与javaType的对应关系
- 如何写出优雅的Python之设置class缺省值
- Redis 事件(2) -- 时间事件
- HDU 4597 - Play Game(区间DP)
- SQL迅速增加表中记录语句
- fcntl设置FD_CLOEXEC标志作用
- Unity5.1 新的网络引擎UNET(四) UNET Remote Actions
- 如何将 Font Awesome 转成 PNG 图标 详细教程 含源代码
- 第一百零一天 how can i 坚持