题意:给出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;
}

最新文章

  1. UniqueIdentifier 数据类型 和 GUID 生成函数
  2. 转载---ViewPager,PagerAdapter,FragmentPagerAdapter和FragmentStatePagerAdapter的分析对比
  3. 实例之JavaScript
  4. Navicat 回复 psc 文件 Mysql
  5. PAT1028—— 人口普查
  6. XMPP适配IPV6 (GCDAsyncSocket适配IPV6)
  7. CSS中定位position
  8. [EXCEL] 在单元格中自动输入时间和日期
  9. Cycling Label
  10. 请问set JAVA_OPTS的各项參数是什么意思?
  11. JAVA card 应用开发(三) 把APPLET(CAP文件)装载到卡片
  12. jQuery中的方法
  13. The 4 Essentials of Video Content Marketing Success
  14. font awesome 页面小图标
  15. liunx存储管理之基础知识
  16. LeetCode OJ 129. Sum Root to Leaf Numbers
  17. [C语言]进阶|图形库
  18. 基于CentOS搭建Nginx 静态网站
  19. rubymine debug需要安装依赖
  20. mysql 获取自增主键

热门文章

  1. 走进科学之揭开神秘的&quot;零拷贝&quot;!
  2. DM8168 自己主动登录root用户
  3. 利用asset存储mesh
  4. Unity 游戏对象消失 enable,destroy与active的区别
  5. 基于Linux整形时间的常用计算思路
  6. CSS3 - 鼠标移入移出时改变样式
  7. EL 表达式 函数 操作 字符串
  8. Lifting the Stone(多边形重心)
  9. MySql存储过程及MySql常用流程控制语法
  10. java的小知识点