首页 > 学院 > 开发设计 > 正文

poj 2240 Arbitrage

2019-11-06 06:50:06
字体:
来源:转载
供稿:网友

Arbitrage

题目链接:http://poj.org/PRoblem?id=2240

题目大意:几种货币之间汇率换算,问是否存在一种情况使得兑换了一圈回来,能盈利,也就是大于 1。

本题与 poj3259 极为相似,只不过本题目为乘,那个为加。

详见代码注释:

#include <iostream>  #include <cstdio>#include<cstring>using namespace std;  const double INF=0x3f3f3f3f; double dis[35][35];int n,m;char a[35][50];int f(char x[]){	for(int i=1;i<=n;i++)		if(strcmp(x,a[i])==0)			return i;} int main() {	int index=0;	int flag;    char x[50],y[50];    double d;    int a1,b1;    while(scanf("%d",&n),n)    {    	flag=0;    	for(int i=1;i<=n;i++)		{			for(int j=1;j<=n;j++)			{				dis[i][j]=0;	//³õʼ»¯ ÎÞÇî ¸ÄΪÁË 0 			}		}		for(int i=1;i<=n;i++)		{			dis[i][i]=1;	//¶Ô½ÇÏ߸³³õÖµ 1 		}							    	for(int i=1;i<=n;i++)    	{    		scanf("%s",a[i]);		}		cin>>m;		for(int i=0;i<m;i++)		{			scanf("%s %lf %s",x,&d,y);			a1=f(x);b1=f(y);			dis[a1][b1]=d;		}        for (int k=1;k<=n;k++)            for (int i=1;i<=n;i++)                  for (int j=1;j<=n;j++)                    if (dis[i][j]<dis[i][k]*dis[k][j])	//Ô­ÏȵļӱäΪÁË³Ë                     	dis[i][j]=dis[i][k]*dis[k][j];                    		for(int i=1;i<=n;i++)	        if(dis[i][i]>1.0)	    	{	           	flag=1;	          	break;			}		if(flag)			printf("Case %d: Yes/n",++index);		else			printf("Case %d: No/n",++index);    }      return 0;  }  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表