链接:
http://poj.org/problem?id=2240
题意:货币交换,本金是否增值。
浅谈:这个题其实和poj1860几乎一样,其实应该比它还简单一点。就是把poj1860的代码改了一下就可以AC了 。有了之前的例子,做这个就快多了。
题意:货币交换,本金是否增值。
浅谈:这个题其实和poj1860几乎一样,其实应该比它还简单一点。就是把poj1860的代码改了一下就可以AC了 。有了之前的例子,做这个就快多了。
#include<iostream>
#include<cstring>
using namespace std;
struct currency
{
char name[20];
};
struct exchange
{
double rate;
int a,b;
};
currency cur[35];
exchange ex[10000];
double dist[35];
int cur_num,ex_num;
int judge(char *s)
{
int i;
for(i=1;i<=cur_num;i++)
if(strcmp(s,cur[i].name)==0)
return i;
return 0;
}
bool BellmanFord()
{
int i,j,flag;
memset(dist,0,sizeof(dist));
dist[1]=1.0;
for(i=1;i<cur_num;i++)
{
flag=1;
for(j=1;j<=ex_num;j++)
if(dist[ex[j].b]<dist[ex[j].a]*ex[j].rate)
{
dist[ex[j].b]=dist[ex[j].a]*ex[j].rate;
flag=0;
}
if(flag)break;
}
for(j=1;j<=ex_num;j++)
if(dist[ex[j].b]<dist[ex[j].a]*ex[j].rate)
return true;
return false;
}
int main()
{
int i,Case=1;
int n,m;
double rate;
char a[20],b[20];
while(cin>>n&&n)
{
cur_num=n;
for(i=1;i<=n;i++)
{
cin>>a;
strcpy(cur[i].name,a);
}
cin>>m;
ex_num=m;
for(i=1;i<=m;i++)
{
cin>>a>>rate>>b;
ex[i].a=judge(a);
ex[i].b=judge(b);
ex[i].rate=rate;
}
if(BellmanFord())
cout<<"Case "<<Case++<<": Yes"<<endl;
else
cout<<"Case "<<Case++<<": No"<<endl;
}
return 0;
}