正文

Zju 1092 Arbitrage2006-08-14 23:33:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cruxd/17580.html

分享到:

2021578 2006-08-14 23:10:47 Accepted 1092 C++ 00:00.37 856K St.Crux 输出的时候犯了一个小错误:"Yes"当作“YES”了。 这个题是很基础的最短路径题,不限次数倒买倒卖,求能否过一定的收益率(这里为1)。我记得uva上有一个题是问在t次交换内能否达到一定的汇率......那样似乎还要记录路径了......上次学校里搞选拔赛的时候做过,做不出。现在还是做不出 TAT 另,memset(a, 0, sizeof(a))对double数组无效。但可以写memset(a, 0x00, sizeof(a)) #include <iostream>#include <fstream>#include <cstring>#include <string>#include <map>using namespace std; double a[30][30];map<string, int> sm, dm;int n, c = 0, ac; int main(){ //ifstream cin("in.txt"); while(cin >> n && n) {  sm = dm;    int i, k, t, j;  for(i = 0; i < n; i ++)  {   string s;   cin >> s;   sm[s] = i;   for(k = 0; k < n; k ++)   {    a[i][k] = 0;  //清零   }  }  cin >> t;  for(i = 0; i < t; i ++)  {   string s0, s1; double td;   cin >> s0 >> td >> s1;   a[sm[s0]][sm[s1]] = td;  }  //pt();  for(j = 0; j < n; j ++)  {   for(i = 0; i < n; i ++)   {    for(k = 0; k < n; k ++)    {     if(a[i][j] * a[j][k] > a[i][k])      a[i][k] = a[i][j] * a[j][k];    //Floyd    }   }  }  //pt();  ac = 0;  for(i = 0; i < n; i ++)  {   if(a[i][i] > 1)   {    ac = 1;    break;   }  }  printf("Case %d: ", ++ c);  if(ac)   printf("Yes\n");  else   printf("No\n"); } return 0;}

阅读(4013) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册