hdu1217——Arbitrage

Arbitrage

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 4840    Accepted Submission(s): 2204

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

University of Ulm Local Contest 1996

Recommend

Eddy   |   We have carefully selected several similar problems for you:  1385 1301 2112 1598 2680

简单的floyd应用

#include <map>
#include <set>
#include <list>
#include <queue>
#include <stack>
#include <vector>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

double dp[33][33];
char str[110], str2[110];

int main()
{
	int n, cnt, m;
	double rate;
	int icase = 1;
	map <string, int> node;
	while (~scanf("%d", &n), n)
	{
		node.clear();
		cnt = 0;
		for (int i = 1; i <= n; ++i)
		{
			scanf("%s", str);
			if (node[str] == 0)
			{
				node[str] = ++cnt;
			}
		}
		memset (dp, 0, sizeof(dp));
		for (int i = 1; i <= cnt; ++i)
		{
			dp[i][i] = 1;
		}
		scanf("%d", &m);
		for (int i = 1; i <= m; ++i)
		{
			scanf("%s%lf%s", str, &rate, str2);
			dp[node[str]][node[str2]] = rate;
		}
		for (int k = 1; k <= cnt; ++k)
		{
			for (int i = 1; i <= cnt; ++i)
			{
				for (int j = 1; j <= cnt; ++j)
				{
					dp[i][j] = max(dp[i][j], dp[i][k] * dp[k][j]);
				}
			}
		}
		bool flag = false;
		for (int i = 1; i <= cnt; ++i)
		{
			if (dp[i][i] > 1)
			{
				flag = true;
				break;
			}
		}
		if (flag)
		{
			printf("Case %d: Yes\n", icase++);
		}
		else
		{
			printf("Case %d: No\n", icase++);
		}
	}
	return 0;
}
时间: 2024-10-15 12:19:37

hdu1217——Arbitrage的相关文章

HDU1217:Arbitrage(SPFA)

题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1217 题目大意 在每种钱币间进行各种交换,最后换回自己如果能赚,那么就Yes,否则No 注意应为有负权所以dijsktra在这里行不通了可以用国产的spfa算法,可比bfs. 我的AC代码 #include<iostream>#include<cstdio>#include<cstring>#include<map>#include<queue>us

HDU1217 Arbitrage 【SPFA】

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4460    Accepted Submission(s): 2032 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform

HDU1217 Arbitrage

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 o

poj2240——Arbitrage(Bellman-Ford算法)

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 Fre

HDU 1217 Arbitrage 【最短路,map+spfa】

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6985    Accepted Submission(s): 3212 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform

hdu 1217 Arbitrage(佛洛依德)

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6360    Accepted Submission(s): 2939 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform o

HDOJ 1217 Arbitrage(拟最短路,floyd算法)

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5679    Accepted Submission(s): 2630 Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform

Arbitrage - poj 2240 (Bellman-ford)

Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17374   Accepted: 7312 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 exa

【组队赛#5】BNU 4291 Arbitrage? (floyd最短路 map映射)

[题目链接]click here~~ [题目大意]去多个国家旅游,给定国与国之间汇率的转化率,如果从起点出发最后回到起点,有收益则符合,否则不符合 [解题思路] 判一次环,用floyd计算距离最短的而且转换率最大的,map<string ,int >映射  <字符串--点> 代码 /* BNUOJ 4291 Arbitrage? Author :HRW 判一次环,用floyd计算距离最短的而且转换率最大的 map<string ,int >映射 <字符串--点&g