zoukankan      html  css  js  c++  java
  • Arbitrage HDU1217

    汇率转换问题: 怎么样才能套利

    可以用Floyd算法:

    #include<bits/stdc++.h>
    using namespace std;
    
    double m1[35][35];
    int main()
    {
        int n,m;
        map<string,int>ma;int cas=1;
        while(scanf("%d",&n)==1,n)
        {
            string ss;
            for(int i=1;i<=n;i++)
            {
                cin>>ss;
                ma[ss]=i;
    
            }
            
            string s1,s2;double rate;
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
            {
                if(i==j)m1[i][j]=1;
                else m1[i][j]=0;
    
            }
            scanf("%d",&m);
            for(int i=1;i<=m;i++)
            {
                cin>>s1>>rate>>s2;
                m1[ ma[s1] ][ ma[s2]  ]=rate;
            }
    
    
    
    
            for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
                for(int k=1;k<=n;k++)
            {
                if(m1[j][k]<m1[j][i]*m1[i][k])
                   m1[j][k]=m1[j][i]*m1[i][k];
    
            }
             int ok=0;
             for(int i=1;i<=n;i++)
               if(m1[i][i]>1){ok=1;break;}
    
    
                 printf("Case %d: %s
    ",cas++,ok?"Yes":"No");
    
        }
    
    
    
    
    
    
    
    
        return 0;
    }
    View Code

    string用cin输入  cin和scanf都会自动略过空格和空行

     spfa算法

    #include <stdio.h>
    #include <iostream>
    #include <cstring>
    #include <map>
    #include <queue>
    #include <algorithm>
    using namespace std;
     
    const int L = 35;
    const double inf = 1000000;
    map<string,int> mat;
    int n,m;
    char str[105],s1[105],s2[105];
    double trip[35][35],dis[35];
     
    int SPFA(int src)
    {
        queue<int> Q;
        int vis[35],i;
        int num[35];
        for(i = 1; i<=n; i++)
            vis[i] = dis[i] = num[i] = 0;
        while(!Q.empty())
            Q.pop();
        dis[src] = 1.0;
        vis[src] = 1;
        Q.push(src);
        while(!Q.empty())
        {
            int now = Q.front();
            Q.pop();
            vis[now] = 0;
            for(i = 1; i<=n; i++)
            {
                if(dis[now]*trip[now][i]>dis[i])
                {
                    dis[i] = dis[now]*trip[now][i];
                    if(dis[src]>1.0)
                        return 1;
                    if(!vis[i])
                    {
                        vis[i] = 1;
                        Q.push(i);
                    }
                }
            }
        }
        return 0;
    }
     
    int main()
    {
        int i,j,cas = 1;
        double w;
        while(~scanf("%d",&n),n)
        {
            mat.clear();
            for(i = 1; i<=n; i++)
                for(j = 1; j<=n; j++)
                    trip[i][j] = (i==j)?1.0:0;
            for(i = 1; i<=n; i++)
            {
                scanf("%s",str);
                mat[str] = i;
            }
            scanf("%d",&m);
            while(m--)
            {
                scanf("%s%lf%s",s1,&w,s2);
                trip[mat[s1]][mat[s2]] = w;
            }
            int flag = 0;
            for(i = 1; i<=n; i++)
            {
                if(SPFA(i))
                {
                    flag = 1;
                    break;
                }
            }
            printf("Case %d: %s
    ",cas++,flag?"Yes":"No");
        }
     
        return 0;
    }
  • 相关阅读:
    全表扫描
    服务器信息表
    事务的丢失更新
    oracle core 概述
    oracle命中率模型计算
    性能量化之cpu
    一个sql导致temp表空间爆掉
    oracle稳定执行计划1
    oracle热点表online rename
    oracle构建一致性读
  • 原文地址:https://www.cnblogs.com/bxd123/p/10322719.html
Copyright © 2011-2022 走看看