POJ - 2240 Arbitrage(Floyd)
2016-05-01 23:14
381 查看
题目链接:http://poj.org/problem?id=2240
#include <iostream>
#include <cstring>
#include <string>
#include <map>
using namespace std;
/****************************************************************************************************************
题意:给定 N 种货币以及货币之间的汇率,问是否通过兑换可以赚钱
思路:
1,利用floyd求每两个点最短路的思想,更新每两种货币之间兑换情况
2,当 Map[i][i] > 1,即通过兑换之后货币本身之间的兑换率 > 1,那么就是赚钱了
3,更新时注意汇率是乘运算,不是加运算
4,最后遍历每种货币,有赚钱情况输出Yes,否则输出No.
****************************************************************************************************************/
double Map[35][35];
map <string ,int> name;
int main()
{
int m,n;
int num=1;
while(cin>>n,n!=0)
{
name.clear();
memset(Map,0,sizeof(Map));
for(int i = 1;i <= n;i ++)
Map[i][i]=1;
string s;
for(int i = 1;i <= n;i ++){
cin>>s;
name[s]=i;
}
cin>>m;
string s1,s2;
double rate;
while(m--)
{
cin>>s1>>rate>>s2;
Map[name[s1]][name[s2]]=rate;
}
for(int k = 1;k <= n;k ++)
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= n;j ++)
if(Map[i][k] && Map[i][j] < Map[i][k]*Map[k][j])
Map[i][j]=Map[i][k]*Map[k][j];
int flag=0;
for(int i = 1;i <= n;i ++){ //遍历所有货币情况
if(Map[i][i] > 1){
flag=1;
break;
}
}
if(flag)
cout<<"Case "<<num++<<": Yes"<<endl;
else
cout<<"Case "<<num++<<": No"<<endl;
}
return 0;
}
#include <iostream>
#include <cstring>
#include <string>
#include <map>
using namespace std;
/****************************************************************************************************************
题意:给定 N 种货币以及货币之间的汇率,问是否通过兑换可以赚钱
思路:
1,利用floyd求每两个点最短路的思想,更新每两种货币之间兑换情况
2,当 Map[i][i] > 1,即通过兑换之后货币本身之间的兑换率 > 1,那么就是赚钱了
3,更新时注意汇率是乘运算,不是加运算
4,最后遍历每种货币,有赚钱情况输出Yes,否则输出No.
****************************************************************************************************************/
double Map[35][35];
map <string ,int> name;
int main()
{
int m,n;
int num=1;
while(cin>>n,n!=0)
{
name.clear();
memset(Map,0,sizeof(Map));
for(int i = 1;i <= n;i ++)
Map[i][i]=1;
string s;
for(int i = 1;i <= n;i ++){
cin>>s;
name[s]=i;
}
cin>>m;
string s1,s2;
double rate;
while(m--)
{
cin>>s1>>rate>>s2;
Map[name[s1]][name[s2]]=rate;
}
for(int k = 1;k <= n;k ++)
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= n;j ++)
if(Map[i][k] && Map[i][j] < Map[i][k]*Map[k][j])
Map[i][j]=Map[i][k]*Map[k][j];
int flag=0;
for(int i = 1;i <= n;i ++){ //遍历所有货币情况
if(Map[i][i] > 1){
flag=1;
break;
}
}
if(flag)
cout<<"Case "<<num++<<": Yes"<<endl;
else
cout<<"Case "<<num++<<": No"<<endl;
}
return 0;
}
相关文章推荐
- java冒泡排序
- 20145203Java实验报告四:Android开发基础
- 奶牛xor--nkoi1873
- Bootstrap 实现输入框中的 x 按钮删除文本值
- andriod no changes to deploy
- POJ - 1125 Stockbroker Grapevine(Floyd)
- new、delete、malloc、free关系
- Android面试题——ListView(一)
- leetcode——139——Word Break
- 64 bit Linux下程序开发注意事项
- 通过这次源码分析直播了解到在中国真正关心源码的webrtc开发者只有1%
- 第八周学习进度条
- 二叉查找树的创建及遍历
- POJ - 1062 昂贵的聘礼(Dijkstra)
- opencv异常提示之 (channels() == CV_MAT_CN(dtype)) in copyTo (暂未解决,提供源码)
- 20145310《Java程序设计》第4次实验报告
- 20145310 《Java程序设计》第9周学习总结
- codeforces 667A A. Pouring Rain(水题)
- [Javascript] Add a browser build to an npm module
- 福斯数据服务平台产品白皮书