Arbitrage

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5794    Accepted Submission(s): 2683

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
 
Source
 
套汇问题,floyd变形
 
/*
ID: LinKArftc
PROG: 1217.cpp
LANG: C++
*/ #include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <vector>
#include <cstdio>
#include <string>
#include <utility>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define eps 1e-8
#define randin srand((unsigned int)time(NULL))
#define input freopen("input.txt","r",stdin)
#define debug(s) cout << "s = " << s << endl;
#define outstars cout << "*************" << endl;
const double PI = acos(-1.0);
const double e = exp(1.0);
const int inf = 0x3f3f3f3f;
const int INF = 0x7fffffff;
typedef long long ll; const int maxn = ;
int n, m;
double table[maxn][maxn]; void floyd() {
for (int k = ; k <= n; k ++) {
for (int i = ; i <= n; i ++) {
for (int j = ; j <= n; j ++) {
table[i][j] = max(table[i][j], table[i][k] * table[k][j]);
}
}
}
} int main() {
//input;
int _t = ;
while (~scanf("%d", &n) && n) {
map <string, int> mp;
string str, str1;
int cnt = ;
for (int i = ; i <= n; i ++) {
cin >> str;
mp[str] = cnt ++;
}
memset(table, , sizeof(table));
scanf("%d", &m);
double change;
for (int i = ; i <= m; i ++) {
cin >> str >> change >> str1;
table[mp[str]][mp[str1]] = change;
}
floyd();
bool flag = false;
for (int i = ; i <= n; i ++) {
if (table[i][i] - 1.0 > eps) {
flag = true;
break;
}
}
if (flag) printf("Case %d: Yes\n", _t ++);
else printf("Case %d: No\n", _t ++);
} return ;
}

最新文章

  1. MVC Razor语法
  2. Spring中scope作用域
  3. Struts框架——(二)Struts原理with登录实例
  4. IT传统组织结构及新型扁平化组织
  5. rsyslog
  6. Android telnet RPi 2B
  7. 《自学C语言》初级教程 - 目录
  8. Hadoop家族学习路线图
  9. AS3 Post 参数和ByteArray的方法及服务器端接收
  10. SVN与TortoiseSVN实战:补丁详解(转)
  11. 基于Hadoop开发网络云盘系统架构设计方案
  12. burpsuite截断绕过前端限制上传一句话
  13. VisionPro随笔-Visionpro空间字符的含义
  14. RFID和QRCODE对比
  15. 2018年,JavaScript都经历了什么?
  16. jQuery 实现点击页面其他地方隐藏菜单
  17. PLSQL无法粘贴复制
  18. ssh连接docker容器
  19. EBS开发附件上传和下载功能(转)
  20. Word揭秘:公式还能这么玩!

热门文章

  1. jmeter无法启动的解决办法
  2. 论文翻译--StarCraft Micromanagement with Reinforcement Learning and Curriculum Transfer Learning
  3. DFS——CodeForces740DAlyona and a tree
  4. asp.net应用程序脱机app_offline.htm文件
  5. 【转】C++ const用法 尽可能使用const
  6. Delphi中动态创建窗体有四种方式
  7. WebApp之Meta标签总结
  8. 【算法】CDQ分治 -- 三维偏序 &amp; 动态逆序对
  9. [Leetcode] rotate image 旋转图片
  10. 【ZJ选讲&#183;压缩】