1. 程式人生 > >hdoj 1217 Arbitrage(floyd+處理名字為字串的情況)

hdoj 1217 Arbitrage(floyd+處理名字為字串的情況)

Arbitrage



Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into more than one unit of the same currency. For example, suppose that 1 US Dollar buys 0.5 British pound, 1 British pound buys 10.0 French francs, and 1 French franc buys 0.21 US dollar. Then, by converting currencies, a clever trader can start with 1 US dollar and buy 0.5 * 10.0 * 0.21 = 1.05 US dollars, making a profit of 5 percent. 

Your job is to write a program that takes a list of currency exchange rates as input and then determines whether arbitrage is possible or not.

Input The input file will contain one or more test cases. Om the first line of each test case there is an integer n (1<=n<=30), representing the number of different currencies. The next n lines each contain the name of one currency. Within a name no spaces will appear. The next line contains one integer m, representing the length of the table to follow. The last m lines each contain the name ci of a source currency, a real number rij which represents the exchange rate from ci to cj and a name cj of the destination currency. Exchanges which do not appear in the table are impossible.
Test cases are separated from each other by a blank line. Input is terminated by a value of zero (0) for n. 

Output For each test case, print one line telling whether arbitrage is possible or not in the format "Case case: Yes" respectively "Case case: No". 

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
Source      這樣寫比map快很多!!!
#include"stdio.h"
#include"string.h"
struct node
{
    char name[33];
}E[33];
int main()
{
    double map[31][31];
    double ans[31][31];
    double t;
    char temp[33];
    int k,n,m,k1,k2,i,j,Case=1;
    while(scanf("%d",&n),n)
    {
        for(i=1;i<=n;i++)
            scanf("%s",E[i].name);
        scanf("%d",&m);
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
            {
                if(i==j)
                    map[i][j]=1;
                else
                    map[i][j]=0;
            }
        for(i=1;i<=m;i++)
        {
            scanf("%s",temp);
            for(k1=1;k1<=n;k1++)
                if(strcmp(E[k1].name,temp)==0)
                    break;
            scanf("%lf",&t);
            scanf("%s",temp);
            for(k2=1;k2<=n;k2++)
                if(strcmp(E[k2].name,temp)==0)
                    break;
            map[k1][k2]=t;
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)
                ans[i][j]=map[i][j];
        }
        for(k=1;k<=n;k++)
        {
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=n;j++)
                    if(ans[i][j]<ans[i][k]*ans[k][j])
                        ans[i][j]=ans[i][k]*ans[k][j];
            }
        }
        if(ans[1][1]>1)
            printf("Case %d: Yes\n",Case++);
        else
            printf("Case %d: No\n",Case++);
    }
    return 0;
}


相關推薦

hdoj 1217 Arbitragefloyd+處理名字字串情況

Arbitrage Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into m

POJ 1217 Arbitragefloyd

pri src pac pan from space code namespace 當前 題目大意 貨幣間有一定的匯率可以相互兌換, 給出n種貨幣並告訴m條各貨幣間的匯率, 看這些貨幣中能否有一種可以通過一系列的兌換而增加。 如果是可行的,那麽就輸出Yes,否則輸出N

HDOJ 1217 Arbitrage(擬最短路,floyd算法)

same double script strong ram tar per bre center Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/

HDU-1217 Arbitrage 有向圖最大環[Floyd]

Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Problem Description Arbitrage is the us

HDU 1217 Arbitragejava版

import java.util.*; public class Main { public static void main(String[] args) { Scanner kb = new

1217 Arbitrage最短路

Problem Description Arbitrage is the use of discrepancies in currency exchange rates to transform one unit of a currency into mo

【hdu 】 Arbitrage Floyd

Arbitrage Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 8   Accepted Submission(s) : 7 Problem D

兩個ajax請求都成功之後打印一個字符串的要求請求均異步

字符串 on() 字符 $.ajax 打印 bbb var fail ucc 方法一: $.when($.ajax({url: ‘url_1‘,data: data, success: function() { console.log(‘aaaa‘); }}),$.ajax

poj3735—Training little cats特殊操作轉化矩陣操作

logs cout att 接下來 tor 成了 pre 組成 little 題目鏈接:http://poj.org/problem?id=3735 題目意思: 調教貓咪:有n只饑渴的貓咪,現有一組羞恥連續操作,由k個操作組成,全部選自: 1. g i 給第i只貓咪一顆花生

python利用百度API進行地理編碼將地名轉換經緯度資訊

更新時間:2018-3-28 更新內容:優化部分程式碼,新增mongodb部分的內容 本文章通過講解如何在百度地圖API申請金鑰,然後在python中呼叫API介面將自有資料中的地名轉換為經緯度座標。 執行環境: python3 一、註冊金鑰

改變android手機搜尋鍵行為搜尋鍵替換電源鍵

LZ苦逼程式設計師一枚 用了個破G14阿  這幾天讓我很惱火的就是電源鍵阿 按多了 都不怎麼靈  google一頓 找到了解決方案。特與大家分享。 手機必須有root許可權。 更改搜尋鍵為:按一下鎖屏,長按出現電源選單!!!!!(2.3.5的rom)1、開啟RE管理器並找

軟體測試流程及規範參考大華的規範

軟體測試流程及規範(參考大華為的規範) 參考某大佬(窩真不知道是哪位大佬)總結的測試流程並結合在華為做測試學到的規範,整理的我們公司的測試流程,分享是一種美德,so開始你的閱讀吧~ 軟體測試流程及規範 一、目標 制定完整且具體的測試路線和流程,為快速、高效和高質量的軟體測試提供基礎流

使用者沒有輸入前臺傳值空時的資料儲存原則

已知: 1、數值型資料可能會涉及到數學運算。 2、數值型別和日期時間型別,當儲存為空值‘’時,sqlserver會分別按預設值儲存(0、1900-01-01 00:00:00.000) 結論:暫時,先將前臺傳值為null或空值時,統一處理成空值‘’傳輸到後臺並儲存;但是應該注意將預設值按空值

如何保證訊息的可靠性傳輸如何處理訊息丟失的問題

RabbitMQ   生產者弄丟了資料     生產者將資料傳送到RabbitMQ的時候,可能資料就在半路給搞丟了,因為網路啥的問題,都有可能。     此時可以選擇用RabbitMQ提供的事務功能,就是生產者傳送資料之前開啟RabbitMQ事務(channel.tx

python中,如何將字串轉換數字將數字轉換整型字串的10轉換整型的10,10.5轉換10

說明:   在實際的應用過程中,有的時候可能會遇到字串的10,需要將字串的10轉換為數字的10   在此記錄下,通過int函式轉換的過程。 操作過程: 1.將字串轉換為整型的10 >>> str1 = "10" #將一個字串的10賦給變數str1 >&g

訊息中介軟體系列五:RabbitMQ的使用場景非同步處理、應用解耦

一、非同步處理 場景: 使用者註冊,寫入資料庫成功以後,傳送郵件和簡訊。 準備工作: 1)安裝RabbitMQ,參考前面的文章 2)新建一個名為RabbitMQAsyncProc的maven web工程,在pom.xml檔案裡面引入如下依賴 <project xmlns="http://maven.a

windows+label使用 2xml檔案 轉換txt檔案

1 在本部落格上篇windows+label使用1後可以生成label的xml檔案後: 2 在darket.exe所在的當前目錄下,新建VOCdevkit資料夾 然後在VOCdevkit資料夾下新建資料夾VOC2018 然後在VOC2018資料夾下新建以下四個資料夾

opencv 基於內容的視訊關鍵幀提取以HSV總量特徵量

#include "stdafx.h" #include #include "opencv2/core/core.hpp" #include #include using namespace std; using namespace cv; void RGBtoHSV(float b

bzoj 1003 物流運輸 處理最短路+區間dp

題意:給一個圖,讓你跑n次最短路,第i次最短路有若干點是不能使用的,並且更改一次路線就又需要加k的額外花費,問跑完n次以後最小花費。 思路:切入點在於某個時間段內花費是不變的,更改路線要加花費,自然想到dp。所以想到把n次最短路分割成多個區間最短路的和,對於每種最短路,我們

雜談——如何合併兩個有序連結串列時間複雜度O(n)

假設本帥博主有連結串列arr1: int[] arr1 = {1,3,6,8,23,34,56,77,90}; 連結串列arr2: int[] arr2 = {-90,34,55,79,87,98,123,234,567}; 我要如何才能夠合併這兩個有序連結串列,使得合併後的連結串列