POJ 2240 Arbitrage(Floyed-Warshall算法)
题意:给出n种货币,m种兑换比率(一种货币兑换为另一种货币的比率),判断测试用例中套汇是否可行。(套汇的意思就是在经过一系列的货币兑换之后,是否可以获利。例如:货币i→货币j→货币i,这样兑换后,是否可以获利,即比率是否>1)。举个例子理解套汇:假设,1美元买10人民币(比率为10),10人民币买100美元(比率为10)。这就是套汇,总比率=10*10=100,100>1,所以可以获利。
思路:Floyed-Warshall算法,枚举所有的货币之间的兑换比率,最后若存在一种回路且回路比率>1的话,则套汇可行。
课本代码:
#include<iostream>
#include<cstdio>
#include<cstring> using namespace std; const int maxn=50;//货币种类上限
const int maxl=1005;//货币名字长度上限 char str[maxn][maxl],stra[maxl],strb[maxl];//货币种类数组str,源货币stra,目标货币strb。 long double dist[maxn][maxn];//比率矩阵 int n,m; int find(char *_str){//查找货币的序号i
for(int i=1;i<=n;i++)
if(strlen(_str)==strlen(str[i])&&strcmp(_str,str[i])==0) return i;
return 0;
} int main(){
while(scanf("%d",&n)&&n){
static int cnt=0;
int i,j,k;
for(i=1;i<=n;i++)//初始化货币比率
for(j=1;j<=n;j++)
dist[i][j]=0;
for(i=1;i<=n;i++)//0不用,作为未知货币。
scanf("%s",str[i]);
scanf("%d",&m);
for(i=1;i<=m;i++){
double w;
scanf("%s %lf %s",stra,&w,strb);
dist[find(stra)][find(strb)]=w;
}
for(k=1;k<=n;k++)//枚举中间节点k
for(i=1;i<=n;i++)//枚举互不相同的节点对(i,j)
for(j=1;j<=n;j++)
if(i!=j&&j!=k&&k!=i)
if(dist[i][k]*dist[k][j]>dist[i][j])
dist[i][j]=dist[i][k]*dist[k][j];
bool flag=0;//标志初始化
for(i=1;i<=n;i++)//枚举每种货币
for(j=1;j<=n;j++)//枚举中间货币
if(dist[i][j]*dist[j][i]>1)//如果比率>1,则套汇可行
flag=1;
printf("Case %d: %s\n",++cnt,flag?"Yes":"No");
}
return 0;
}
POJ 2240 Arbitrage(Floyed-Warshall算法)的更多相关文章
- poj 2240 Arbitrage 题解
Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 21300 Accepted: 9079 Descri ...
- 最短路(Floyd_Warshall) POJ 2240 Arbitrage
题目传送门 /* 最短路:Floyd模板题 只要把+改为*就ok了,热闹后判断d[i][i]是否大于1 文件输入的ONLINE_JUDGE少写了个_,WA了N遍:) */ #include <c ...
- POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环)
POJ 2240 Arbitrage / ZOJ 1092 Arbitrage / HDU 1217 Arbitrage / SPOJ Arbitrage(图论,环) Description Arbi ...
- poj 2240 Arbitrage (Floyd)
链接:poj 2240 题意:首先给出N中货币,然后给出了这N种货币之间的兑换的兑换率. 如 USDollar 0.5 BritishPound 表示 :1 USDollar兑换成0.5 Britis ...
- POJ 2253 Frogger(warshall算法)
题意:湖中有很多石头,两只青蛙分别位于两块石头上.其中一只青蛙要经过一系列的跳跃,先跳到其他石头上,最后跳到另一只青蛙那里.目的是求出所有路径中最大变长的最小值(就是在到达目的地的路径中,找出青蛙需要 ...
- poj 2240 Arbitrage bellman-ford算法
点击打开链接 Arbitrage Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13434 Accepted: 5657 ...
- POJ 2240 Arbitrage【Bellman_ford坑】
链接: http://poj.org/problem?id=2240 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- POJ 2240 Arbitrage(判正环)
http://poj.org/problem?id=2240 题意:货币兑换,判断最否是否能获利. 思路:又是货币兑换题,Belloman-ford和floyd算法都可以的. #include< ...
- POJ 2240 Arbitrage(floyd)
http://poj.org/problem?id=2240 题意 : 好吧,又是一个换钱的题:套利是利用货币汇率的差异进行的货币转换,例如用1美元购买0.5英镑,1英镑可以购买10法郎,一法郎可以购 ...
随机推荐
- C分配struct变量一个不理解的地方
- 2017年Android百大框架排行榜(转)
一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...
- shell脚本57问
[1]交互方式.非交互方式.Shell脚本是什么? 经常与linux打交道,肯定对shell这个词不陌生.不明白shell意思的,可以自行翻译:外壳.去壳. 这个翻译结果怎么可以与计算机系统联系起来呢 ...
- 嵌入式驱动开发之sensor---sensor 图形传感器调试
图像传感器(image sensor)复位顺序 1. 硬件复位寄存器:2. 软件复位寄存器:3. 设置时钟寄存器:4. 设置PLL倍频:5. 设置分辨率:6. 设置窗口控制:7. 设置输出顺序:8. ...
- 编程算法 - 二叉树的最低公共祖先 代码(C)
二叉树的最低公共祖先 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 二叉树的最低公共祖先(lowest common ancestor), 首先先序遍 ...
- windows10系统自带输入法不能切换中文如何解决
具体如下: 1.打开计算机管理软件,右击“开始”按钮,在弹出的菜单中选择“计算机管理”: 2.或在桌面右击“此电脑”图标,在弹出的菜单中选择“管理”: 3.在打开的计算机管理软件中,选择“系统工具”- ...
- 【BZOJ3333】排队计划 树状数组+线段树
[BZOJ3333]排队计划 Description Input Output Sample Input 6 2 160 163 164 161 167 160 2 3 Sample Output 6 ...
- ASP.NET中指定自定义HTTP响应标头
新建一个类HideServerHeaderHelper,继承 IHttpModule,然后重写 OnPreSendRequestHeaders,Dispose,Init方法,如下代码所示 using ...
- URAL 1010 Discrete Function【简单暴力】
链接: http://acm.timus.ru/problem.aspx?space=1&num=1010 http://acm.hust.edu.cn/vjudge/contest/vie ...
- zoj 3721 Final Exam Arrangement【贪心】
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3721 来源:http://acm.hust.edu.cn/vjudg ...