zoukankan      html  css  js  c++  java
  • ZOJ 1092 Arbitrage

    原题链接

    题目大意:Arbitrage这个单词的解释是“套利交易”,就是利用几个币种之间的汇率差价来赚钱。比如人民币兑美元6:1,美元兑欧元1.5:1,欧元兑人民币10:1,那么用9元人民币可以换1.5美元,1.5美元换1欧元,1欧元换10元人民币。这样一倒手,就赚了1元。这是闷声发大财的典型例子!

    解法:在做这道题的时候,又学会了一种新的算法(Floyd算法)。具体过程是开辟一个方阵,每行每列都对应一种货币,每个元素就是横纵两种货币的汇率。然后是一个三层循环,最外层的循环是表示过度节点的,这一层必须放在最外面,里面两层是行和列的扫描。如果经过某一个过渡点汇率增加了,就更新这个节点。这里还要注意一个地方,字符串的比较,直接“==”就完蛋了,要用strcmp(str1,str2)==0来比较。

    参考代码:

    #include<iostream>
    #include<string>
    using namespace std;
    
    int main(){
    	int i,j,k,m,n,cases=0;
    	string str1,str2;
    	double t;
    
    	while(cin>>n&&n!=0){
    		cases++;
    		string currency[30];
    		double table[30][30]={0.0};	//must use a constant value to initiate an array
    		for(i=0;i<n;i++){
    			cin>>currency[i];
    			table[i][i]=1;
    		}
    		cin>>m;
    		for(i=0;i<m;i++){
    			cin>>str1>>t>>str2;
    			j=0;
    			while(j<n){
    				if(str1.compare(currency[j])==0)
    				break;
    				j++;
    			}
    			k=0;
    			while(k<n){
    				if(str2.compare(currency[k])==0)
    					break;
    				k++;
    			}
    			table[j][k]=t;
    		}
    		for(k=0;k<n;k++){
    			for(i=0;i<n;i++){
    				for(j=0;j<n;j++){
    					if(table[i][k]*table[k][j]>table[i][j])
    						table[i][j]=table[i][k]*table[k][j];
    				}
    			}
    		}
    		bool flag=0;
    		for(i=0;i<n;i++){
    			if(table[i][i]>1){
    				cout<<"Case "<<cases<<": Yes"<<endl;
    				flag=1;
    				break;
    			}
    		}
    		if(flag==0)
    			cout<<"Case "<<cases<<": No"<<endl;
    			
    	}
    
    
    	return 0;
    }
    
    
    /*
    blog.csdn.net/zxy_snow/article/details/5810890
    
    For k←1 to n do // k为“媒介节点”  
       For i←1 to n do  
          For j←1 to n do  
             if (dist(i,k) + dist(k,j) < dist(i,j)) then // 是否是更短的路径?  
                dist(i,j) = dist(i,k) + dist(k,j)  
    */
  • 相关阅读:
    AtCoder Grand Contest 015 题解
    AtCoder Grand Contest 014 题解
    AtCoder Grand Contest 013 题解
    AtCoder Grand Contest 012 题解
    AtCoder Grand Contest 011 题解
    AtCoder Grand Contest 010 题解
    AtCoder Grand Contest 009 题解
    NOIP2017 Day2 题解
    博客园主题备份
    多项式全家桶
  • 原文地址:https://www.cnblogs.com/naive/p/3568774.html
Copyright © 2011-2022 走看看