频道栏目
首页 > 程序开发 > 软件开发 > C语言 > 正文
HDU 1217 Arbitrage
2011-08-17 16:43:57      个评论      
收藏   我要投稿

题意是说给你N种货币以及,货币与货币之间的M种汇率,
让你判断是否存在经过若干次货币的兑换使得某种货币的
价值大于原来本身的价值,比如所:美元:美元 = 1 : 1;
题意就是让你判断,在当前的货币兑换率的基础上,能不能
使 美元 : 美元 > 1 : 1; 利用Floyd算法即可搞定,代码如下:  1 #include<iostream>
 2 #include<queue>
 3 #include<cstring>
 4 #define size 40
 5 #define inf 0
 6 using namespace std;
 7 char s1[100],s2[100],str[40][100];
 8 double map[size][size], dir[size], x;
 9 int n, m, k, a, b, flag = 1;
10
11 int tree(char s[])
12 {
13     for(int a=0;a<n;a++)
14         if(strcmp(s,str[a])==0)return a;
15 }
16
17 int main()
18 {
19     while(scanf("%d", &n), n)
20     {
21         int c,d,e;
22         k=0;
23         for(a=0;a<n;a++)
24         {
25             scanf("%s", &str[a]);
26         }
27         scanf("%d", &m);
28         for(a=0;a<size;a++)
29             for(b=0;b<size;b++)
30             map[a][b]=0;
31         while(m--)
32         {
33             scanf("%s %lf %s", &s1, &x, &s2);
34             a=tree(s1);
35             b=tree(s2);
36             map[a][b]=x;
37         }
38         for(c=0;c<n;c++)
39             for(d=0;d<n;d++)
40                 for(e=0;e<n;e++)
41                     if(map[d][c]*map[c][e]>map[d][e])
42                     {
43                         map[d][e]=map[d][c]*map[c][e];
44                         if(map[0][0]>1)break;
45                     }
46         if(map[0][0]>1)
47             cout<<"Case "<<flag<<": Yes"<<endl;
48         else
49             cout<<"Case "<<flag<<": No"<<endl;
50         flag++;
51     }
52 }

点击复制链接 与好友分享!回本站首页
相关TAG标签 HDU Arbitrage
上一篇:switch default
下一篇:空对象模式---函数需要返回一个无意义的对象或者对象引用的探讨
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站