zoukankan      html  css  js  c++  java
  • hdu 1217 汇率 Floyd

    题意:给几个国家,然后给这些国家之间的汇率。判断能否通过这些汇率差进行套利交易。

    Floyd的算法可以求出任意两点间的最短路径,最后比较本国与本国的汇率差,如果大于1,则可以。否则不可以。

    有向图 一个点到另一点的花费为权值相乘 求乘积的最大值 从点i出发 再回到点i的花费如果大于1 就可以

    Sample Input
    3
    USDollar
    BritishPound
    FrenchFranc
    3
    USDollar 0.5 BritishPound
    BritishPound 10.0 FrenchFranc
    FrenchFranc 0.21 USDollar

    3
    USDollar
    BritishPound
    FrenchFranc
    6
    USDollar 0.5 BritishPound
    USDollar 4.9 FrenchFranc
    BritishPound 10.0 FrenchFranc
    BritishPound 1.99 USDollar
    FrenchFranc 0.09 BritishPound
    FrenchFranc 0.19 USDollar

    0

    Sample Output
    Case 1: Yes
    Case 2: No

     1 # include <iostream>
     2 # include <cstdio>
     3 # include <cstring>
     4 # include <string>
     5 # include <algorithm>
     6 # include <cmath>
     7 # include <map>
     8 # define LL long long
     9 using namespace std ;
    10 
    11 map<string,int>name;
    12 const int MAXN = 35 ;
    13 double dis[MAXN][MAXN];
    14 int n ;
    15 
    16 void floyed()//节点从1~n编号
    17 {
    18     int i,j,k;
    19     for(k=1;k<=n;k++)
    20        for(i=1;i<=n;i++)
    21          for(j=1;j<=n;j++)
    22              if(dis[i][k]*dis[k][j] > dis[i][j])
    23                  dis[i][j]=dis[i][k]*dis[k][j];
    24 
    25 }
    26 
    27 int main()
    28 {
    29     //freopen("in.txt","r",stdin) ;
    30     int i,m,j;
    31     string str1,str2;
    32     double w;
    33     int iCase=0;
    34     while(scanf("%d",&n),n)
    35     {
    36         iCase++;
    37         for(i=1;i<=n;i++)
    38         {
    39             cin>>str1 ;
    40             name[str1]=i;
    41         }
    42         for(i=1;i<=n;i++)
    43            for(j=1;j<=n;j++)
    44            {
    45                if(i==j)dis[i][j]=1;
    46                else dis[i][j]=0;
    47            }
    48         scanf("%d",&m);
    49         while(m--)
    50         {
    51             cin>>str1>>w>>str2;
    52             dis[name[str1]][name[str2]]=w;
    53         }
    54         floyed();
    55         bool flag=false;
    56         for(i=1;i<=n;i++)
    57           if(dis[i][i]>1)
    58           {flag=true;break;}
    59         if(flag)  printf("Case %d: Yes
    ",iCase);
    60         else printf("Case %d: No
    ",iCase);
    61     }
    62     return 0;
    63 }
    View Code
  • 相关阅读:
    Android Animation学习 实现 IOS 滤镜退出动画
    Android Camera 流程梳理
    iOS启动页广告XHLaunchAd
    实现百度外卖APP个人中心头像"浪"起来的动画效果
    iOS 常用控件集合 完整项目
    Python split()分割函数Python实现源码
    Selenium RC和Selenium Webdriver环境搭建(Python)
    Python rPyc 模块应用:在远端上执行命令,并且获取查询结果
    APP UI设计相关的一些链接
    IOS 开发的官方文档链接
  • 原文地址:https://www.cnblogs.com/mengchunchen/p/4588134.html
Copyright © 2011-2022 走看看