poj2240
2015-08-19 18:28
357 查看
链接:点击打开链接
题意:有一些钱的汇率,看是否有一种钱经过兑换能够产生利润
代码;
题意:有一些钱的汇率,看是否有一种钱经过兑换能够产生利润
代码;
#include <iostream> #include <string.h> #include <stdio.h> #include <algorithm> using namespace std; double dis[300][300]; int n,m; struct node{ char str[500]; }s[500]; int cmp(struct node a,struct node b){ return strcmp(a.str,b.str)<0; } int binsearch(char *temp){ int low,high,mid; low=1;high=n; while(low<=high){ mid=(low+high)/2; if(strcmp(s[mid].str,temp)==0) return mid; else if(strcmp(s[mid].str,temp)>0) high=mid-1; else if(strcmp(s[mid].str,temp)<0) low=mid+1; } } //二分查找字符串位置 void floyd(){ int i,j,k; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) dis[i][j]=max(dis[i][j],dis[i][k]*dis[k][j]); } //floyd算法模板 int main(){ //求有向图最大环 char temp[500]; int i,j,a,b,cur,sign; double c; cur=1; while(scanf("%d",&n)!=EOF&&n){ for(i=1;i<=n;i++) for(j=1;j<=n;j++){ if(i==j) dis[i][j]=1; //i,j相等时要将dis数组值赋为1 else dis[i][j]=0; } for(i=1;i<=n;i++) cin>>s[i].str; sort(s+1,s+n+1,cmp); scanf("%d",&m); for(i=0;i<m;i++){ cin>>temp; a=binsearch(temp); cin>>c; cin>>temp; b=binsearch(temp); dis[a][b]=c; //找出a,b位置后赋值 } floyd(); sign=0; for(i=1;i<=n;i++) if(dis[i][i]>1){ //找出换完后大于1的 sign=1; break; } if(sign) printf("Case %d: Yes\n",cur++); else printf("Case %d: No\n",cur++); } return 0; }
相关文章推荐
- 线程操作之第二篇------Looper
- BAE上部署Ghost开发版
- selenium及webdriver的原理
- linux简单内核链表排序
- 【读书笔记】iOS-查看一个软件ipa包的内容
- 浅析 Hadoop 中的数据倾斜
- MYSQL -- 查表字段描述SQL
- netty4客户端循环侦测服务端的代码实现
- Spring 整合Quartz 2实现定时任务四:细化调整及一些已知的问题
- Android开发遇到问题汇总
- 从概要走向精细, 诸葛 IO 提供精细化的运营分析
- 【读书笔记】iOS-查看一个软件ipa包的内容
- Git的版本和分支管理
- salt-broker: 轻量级的Salt Proxy解决方案
- 从最大似然到EM算法浅解
- ANDROIDASYNC 作为安卓的 Http Server
- rt5350板上跑wifi audio
- (一)设计模式分类及总述
- Android学习笔记之SoftReference软引用...
- Spring 3整合Quartz 2实现定时任务二:动态添加任务