スクリーンショット_2019-04-04_23

文系ギャルが0から始める競技プログラミング#3

Intro

この記事は不定期連載です。
↓最初の一本はこちら↓
文系ギャルが0から始める競技プログラミング#0

↓直前の記事はこちら↓
文系ギャルが0から始める競技プログラミング#2

・ABC119

ひたすら過去問を解いています。
今回はABC119A問題と、ちょっとステップアップしてB問題にチャレンジです。

・A問題

問題文
文字列 S が入力されます。これは、西暦 2019年の実在する日付を yyyy/mm/dd の形式で表したものです。
(例えば、2019年 4月 30 日は 2019/04/30 と表されます。)
Sが表す日付が 2019年 4月 30日またはそれ以前なら Heisei、そうでなければ TBD と出力するプログラムを書いてください。

制約

Sは西暦 2019年の実在する日付を yyyy/mm/dd の形式で表す文字列である。

入力
入力は以下の形式で標準入力から与えられる。
S

出力
Sが表す日付が 2019年 4月 30日またはそれ以前なら Heisei、そうでなければ TBD と出力せよ。
― A - Still TBD

これは多分簡単だ…!(天才ムーブ)
yとmとd、あと間のスラッシュは別に分けて拾ってきて、
2019年の実在する日付ということなので、月が4以下なら"Heisei"でいいと考えます。


#include <iostream>
using namespace std;
int main()
{
   int y,m,d;
   char a,b;
   cin >> y >> a >> m >> b >> d;
   
   if(m <= 4){
       cout << "Heisei" << endl;
   }else{
       cout << "TBD" << endl;
   
   }
   
   return 0;
}

これでどうよ!と提出したら普通にACだったので、調子に乗ってB問題行ってみたいと思います!

・B問題

問題文
高橋くんは N人の親戚からお年玉をもらいました。
N個の値 x1,x2,...,xNと N個の文字列 u1,u2,...,uNが入力されます。
各文字列 uiは JPY または BTC であり、
xiと uiがi人目の親戚からのお年玉の内容を表します。
例えば、x1=10000, u1=JPY であれば 1人目の親戚からのお年玉は 10000円であり、x2=0.10000000, u2=BTC であれば 2人目の親戚からのお年玉は 0.1ビットコインです。
ビットコインを 1.0BTC あたり 380000.0円として換算すると、高橋くんがもらったお年玉は合計で何円に相当するでしょうか?

制約

2≤N≤10 ui=JPY または BTC
ui=JPY のとき xiは整数であり、
1≤xi≤108 ui=BTC のとき xiは小数点以下の桁を 8桁持つ小数であり、0.00000001≤xi≤100.00000000

出力
高橋くんが受け取ったお年玉が合計で Y円に相当するとき、値 Y(整数とは限らない) を出力せよ。
出力は、ジャッジの出力との絶対誤差または相対誤差が 10−5以下のとき正解と判定される。
― B - Digital Gifts

お年玉ビットコインって何事だよ!と思いましたが、しっかり解いていきます
最初は金額単位をそれぞれ分けて配列に突っ込んでいく…と考えたのですが、何故かうまく行かず路線変更
途中でどうやらビットコインが小数点以下であることが問題っぽい…?と考えたので、ググり倒します。
doubleというのを使えば良さそうということに気づきました。
floatとの違いがまだわかっていません。Twitterやコメントで教えてください。DMも全開放しています。)
とりあえず小数点以下で扱えるようになったっぽいので、
 箱 ans を用意しておいて、ぽいぽい突っ込んでいく…つまり以下のように処理していく感じを想定しました。

#include <iostream>
#include <string>
using namespace std;
int main()
{
   int n;
   cin >> n;
   double ans = 0;
   
   double x;
   string u;

とりあえずここまで持ってくるのは良しとして、どうやって通貨を見ていく考えました
親戚がN人いるなら、Nから1ずつ減らして1まで行けばいいのでは?
天才なので気がつきました、あとはそのまま↑の図の通り進めてみます。


    while(n--){
   cin >> x >> u;
   
   if(u == "BTC"){
       x *= 380000;
       ans += x;
       
   }else{
       ans += x;
   }
   }
   cout << ans << endl;
   
   return 0;
}

奇跡的に動いたーーー!
狂喜乱舞しながら提出したら、ACでした!

Outro

というわけで、B問題にも手を付け始めて見ようかと思います。
ググり力が試される。
#4に続く。(不定期連載です。)

これは成功と挫折を繰り返し、
タピオカ片手に難問を解く、
ギャルプログラマが生まれるまでの物語である…。


この記事が気に入ったらサポートをしてみませんか?