博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ-2240
阅读量:6332 次
发布时间:2019-06-22

本文共 2948 字,大约阅读时间需要 9 分钟。

Arbitrage
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 19063   Accepted: 8069

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 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

3USDollarBritishPoundFrenchFranc3USDollar 0.5 BritishPoundBritishPound 10.0 FrenchFrancFrenchFranc 0.21 USDollar3USDollarBritishPoundFrenchFranc6USDollar 0.5 BritishPoundUSDollar 4.9 FrenchFrancBritishPound 10.0 FrenchFrancBritishPound 1.99 USDollarFrenchFranc 0.09 BritishPoundFrenchFranc 0.19 USDollar0

Sample Output

Case 1: YesCase 2: No

 

思路: 抽象出来这题就是要求一个图的最大环,仍然用Floyd算法 要注意下G数组的对角线的值都要是1

#include 
#include
#include
using namespace std;map
money;double G[37][37];int n,m;void Floyd(){ for(int k = 1;k <= n;k++) for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++) if(G[i][j] < G[i][k]*G[k][j]) G[i][j] = G[i][k]*G[k][j];}int main(){ int countt = 0; while(cin>>n && n) { string tmp; for(int i = 1;i <= n;i++) { cin>>tmp; money.insert(make_pair(tmp,i)); G[i][i] = 1; } cin>>m; string t1,t2; double t; for(int i = 1;i <= m;i++) { cin>>t1>>t>>t2; G[money[t1]][money[t2]] = t; } Floyd(); int flag = 0; for(int i = 1;i <= n;i++) if(G[i][i] > 1) { flag = 1; break; } if(flag) cout<<"Case "<<++countt<<": Yes"<

 

转载于:https://www.cnblogs.com/immortal-worm/p/5187630.html

你可能感兴趣的文章
玩转SSRS第七篇---报表订阅
查看>>
WinCE API
查看>>
POJ 3280 Cheapest Palindrome(DP 回文变形)
查看>>
SQL语言基础
查看>>
对事件处理的错误使用
查看>>
最大熵模型(二)朗格朗日函数
查看>>
深入了解setInterval方法
查看>>
html img Src base64 图片显示
查看>>
[Spring学习笔记 7 ] Spring中的数据库支持 RowMapper,JdbcDaoSupport 和 事务处理Transaction...
查看>>
FFMPEG中关于ts流的时长估计的实现(转)
查看>>
Java第三次作业
查看>>
【HDOJ 3652】B-number
查看>>
android代码混淆笔记
查看>>
Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集
查看>>
BMP文件的读取与显示
查看>>
Flash文字效果
查看>>
各种排序算法总结篇(高速/堆/希尔/归并)
查看>>
使用c#訪问Access数据库时,提示找不到可安装的 ISAM
查看>>
Highcharts X轴纵向显示
查看>>
windows 注册表讲解
查看>>