POJ 2240 Arbitrage 套利

来源:互联网 发布:python网络数据采集pdf 编辑:程序博客网 时间:2024/04/29 09:08
自己到自己开始为1,经过floyd。。。。。之后看看是否有map[i][i]>1,如果有,就可以获利
#include <algorithm>#include <iostream>#include <cstdlib>#include <cstring>#include <cstdio>#define inf 0x3f3f3fusing namespace std;double map[50][50];void view(int n){    char s[100][100];    char a[100];    char b[100];    int i, j, k;    for(i = 1;i <= n;i++){        cin >> s[i];    }    int m;    cin >> m;    double t;    for(i  =1;i <= m;i++){        cin >> a >> t >> b;        for(j = 1;j <= n;j++){            if(!strcmp(s[j],a)){                break;            }        }        for(k = 1;k <= n;k++){            if(!strcmp(s[k],b)){                break;            }        }        map[j][k] = t;    }}void floyd(int n){    int i, j, k;    for(k = 1;k <= n;k++){        for(i = 1;i <= n;i++){            for(j = 1;j <= n;j++){                if(map[i][j] < map[i][k]*map[k][j]){                    map[i][j] = map[i][k]*map[k][j];                }            }        }    }}int main(){    int n;    int flag;    int cnt = 0;    int i, j;    while(cin >> n){        if(n == 0)  break;        for(i = 1;i <= n;i++){            for(j = 1;j <= n;j++){                if(i == j)                    map[i][j] = 1;                else                    map[i][j] =0;            }        }        cnt++;        flag = 0;        view(n);        floyd(n);        for(i = 1;i <= n;i++){            if(map[i][i] > 1){                flag = 1;                break;            }        }        if(flag){            printf("Case %d: Yes\n", cnt);        }else {            printf("Case %d: No\n", cnt);        }    }    return 0;}

0 0
原创粉丝点击