JZOJ 3241.マネー

タイトル

説明

あなたは、多国籍企業の賃金、自国の通貨を各労働者の賃金を担当しています。あなたが手に持っている国の十分なお金があるならば、あなたは彼に直接送信されます。国が十分なお金を持っていない場合、彼は通貨の他のタイプを受信する気にしないだろう、前提は、彼はそれなしで行かなかった交換関係に基づいています。例えば、お金の6種類が存在する:A、B、C、D 、E、Fは、 これらの交換通貨の関係を知っている:

23は=である17 B

16 C 29 = E

。5 E B = 14

。1. 7 D = F.

が場合カラー100 A以上の労働者、そしてあなたがあまりない通貨を行うために起こる、あなたは74 B(100.12 Aに相当)、115 C(100.72 Aに相当)または207 E(100.02 Aに相当)を置き換えることを検討することがあります。あなたは、この賃金労働者に値するために最も近いので、207 Eを払う必要があります。

上記の交換関係は、あなたの関係は、コンバーチブル通貨Aを推論し、D、AとFのできないことに注意してください。

限られた空間のqiancangに、各通貨あなただけの100,000最大を保持することができますので、あなたはE 64000通貨で支払うことはできませんが、73078とCが支払うことを許可されています。

サラリーマンと仮定すると、あなただけではなく、金融決済を行うが、他の通貨でお金位置がいっぱいです。あなたは労働者の賃金を支払うことをどのように計算するのに役立つプログラムを記述する必要があります。
 

入力

入力の最初の行nは整数、次のn個の行である、二つの異なる通貨を有する各列は、フォームの関係を交換:

VAL1あるNAME1 = VAL2 NAME2

NAME1とNAME2は、ヴァル1通貨名であるとval 2は< 30 =正の整数であり、せいぜい8通貨、10以下の文字の通貨名。

交換関係は存在しない1 A = 2B、1B = 2Cと同様であり 、1C = 2A この競合状況。

そして、そこヴァル名のような形のラインであり、賃金の決済通貨の代わりに(ヴァルない100,000以下)。

出力

賃金の量を表すVALおよび名前との間の空間、及び対応する通貨によって分離ヴァル名の形式で出力します。ユニークな解決策があることを保証するために、各テストデータ。
 

サンプル入力

入力1:
4
。23 = 17 Bである
16 C 29 = E
5 E B = 14。
1. 7 D F. =。
100

入力2:
1
1ドル= 2 RMB。
40 RMB

サンプル出力

出力1:
207 Eの

出力2:
20 USDです
 
 

データ制約

通貨を超えない8

分析

 

  • 初見ではなく、その道路のシミュレーションの質問で
  • 名前の名前は、爆撃の精度を見つけるように見えます
  • に従事していない忘れ
  • もともと、私は質問を誤解しました
  • 丸めいいえ、すべてがに取得します
  • 彼はflored、図と呼ばれますか?

 

 

コード

1の#include <iostreamの>
 2の#include <地図>
 3の#include <ベクトル>
 4の#include <CStringの>
 5  の#define MAPP〔S1〕
 6  の#define BのMAPP〔S2〕
 7  使って 名前空間STDを、
8  二重 Z [ 10 ] [ 10 ] KK [ 10 ]。
9  ストリング S [ 10 ]。 
10マップ< 文字列int型 > MAPP。
11  int型CNT、ANS、N。
12  二重 K [ 10 ]。
13  のintフラグ[ 10 ] [ 10 ]。
14  ダブルミネソタ州(二重 AA、ダブル BB){ 場合(AA> BB)戻り BB。 戻りAA;}
 15  のint main()の
 16  {
 17      チャーC。
18      ストリングS1、S2。
19      CIN >> N。
20      ダブルX、Y。
21      のためにint型 i = 1 ; iが<= N iが++ 22      {
 23         CIN >> X >> S1; もし(!A){= ++ CNT; S [A] = S1;}
 24          CIN >> C。
25          CIN >> Y >> S2。もし {B = ++ CNT(B!)。S [B] = S2;} 
 26          Z [A] [B] = Y / X。
27          Z [B] [A] = X / Y。
28      }
 29      のためのint型のk = 1 ; K <= CNTあり、k ++ 30          のためのINT i = 1 ; iが= CNTを<; I ++ 31              のためのINT J = 1 ; J <= CNT; J ++ 32                  場合を(Z [I] [J] == 0 && Z [i]が[K]!= 0 && Z [k]は[J]!= 0 33                    Z [i]は[J] = Z [i]が[K] * Z [K] [J]。
34      int型のM、L。
35      CIN >> M >> S1。
36      L = 37      int型T1、G1、WZ。
38      二重 T2 = 1E9。
39      ダブルG2。
40      のためには、int型 i = 1 ; iは= CNTを<; iは++ 41      {
 42          であれば(私== L || Z [L] [I]!)続けます43          のG2 = mの*Z [L] [I]。
44          、G1 =(INT )(G2)。
45          であれば(G2-G1> 1E- 9)++ G1。
46          場合(G1> 1E5)を続けます47          、G2 = G1 * Z [i]が[L] - M。
48          であれば(G2 < T2)
 49          {
 50              、T1 = G1。
51              T2 = G2。
52              WZ = I。
53          }
 54      }
 55      COUT << T1 << "  " << S [WZ]。 
56 }

 

おすすめ

転載: www.cnblogs.com/zjzjzj/p/11116191.html