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

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

Intro

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

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


・ABC128A

うっ…つらいぜ…
とはいえへこんではいられないので優勝します!!!

問題文
林檎がA個、林檎の欠片がP個あります。
林檎1個は、砕くことで林檎の欠片3個になります。
また、林檎の欠片2個を鍋で煮込むことで、アップルパイが1個作れます。
今ある材料で作れるアップルパイの最大数を求めてください。

制約
入力は全て整数である。
0≤A,P≤100

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

出力
今ある材料で作れるアップルパイの最大数を出力せよ。
A - Apple Pie

アップルパイ〜〜〜食べたいな〜〜〜
これはもう計算しながら出力すればいっかな?ってことでさっくり。
ここまでは…ここまではよかったんだ…(昨日に引き続き)

#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
#include <regex>
#include <map>
#include <set>
using namespace std;
int main(){
   int A,P;
   cin >> A >> P;
   
   cout << (A*3+P)/2 << endl;
   
   return 0;
}

優勝〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜!
まあ天才なのでこれくらいはね。

・ABC128B

雲行きが怪しくなってきました。(真顔)

問題文
あなたは美味しいレストランを紹介する本を書くことにしました。
あなたはN個のレストラン、レストラン1、レストラン2、…、レストランNを紹介しようとしています。
レストランiはSi市にあり、あなたは100点満点中Pi点と評価しています。
異なる2個のレストランに同じ点数がついていることはありません。
この本では、次のような順でレストランを紹介しようとしています。
市名が辞書順で早いものから紹介していく。
同じ市に複数レストランがある場合は、点数が高いものから紹介していく。
この本で紹介される順にレストランの番号を出力してください。

制約
1≤N≤100
Sは英小文字のみからなる長さ1以上10以下の文字列
0≤Pi≤100
Piは整数
Pi≠Pj(1≤i<j≤N)

入力
入力は以下の形式で標準入力から与えられる。
N
S1 P1
:
SN PN

出力
N行出力せよ。
i行目 (1≤i≤N) には、i番目に紹介されるレストランの番号を出力せよ。
B - Guidebook

おまえロシア人かよ!(ロシア料理大好き〜!)
ちなみに山手線沿線にわたしの好きなロシア料理やさんがあるので聞いてください。(順位表から読み取れないどうでもいい情報です)

地名/点数/もとの順番3つの要素をまとめて並び替えする必要がありました。
pairって3つ以上扱えんの!????!?!??とググり倒した結果、
二重にすれば行けそうってことでとりあえず二重でぶっこんでみることにします。

   int N;
   cin >> N;
   vector<pair<string,pair<int,int>>> SP(N);

1番目に地名2番めの1番目に点数
2番めの2番めに元の順番を入れようとしていきますが、
点数は高い順に並べたいので-1倍します。

   for(int i=0;i<N;i++){
       cin >> SP[i].first >> SP[i].second.first;
       SP[i].second.second = i;
       SP[i].second.first = SP[i].second.first*-1;
   }

ネタバレするとここが間違っています。
さてどこでしょう☆

そんなことはつゆ知らず、並べ替えてもとの順番を出力します。

   sort(SP.begin(),SP.end());
   for(int i=0;i<N;i++){
       cout << SP[i].second.second << endl;
   }

あれ???
変な順番になるう〜〜〜〜?

ここでつまり意味もわからずがちゃがちゃやってコンテスト終了
終了後、天の声に助けを求めると・・・

0番目からi番目になってるよ

そう、元の順番を入れるときにi+1で入れなくちゃいけなかったのです。
変な順番だと思っていたけど、単純に1足りてなかったことに気づかなくて・・・。

というわけで、↓が優勝ムーブでした。

#include <iostream>
#include <algorithm>
#include <string>
#include <cmath>
#include <vector>
#include <regex>
#include <map>
#include <set>
using namespace std;
int main(){
   int N;
   cin >> N;
   vector<pair<string,pair<int,int>>> SP(N);
   
   for(int i=0;i<N;i++){
       cin >> SP[i].first >> SP[i].second.first;
       SP[i].second.second = i+1;
       SP[i].second.first = SP[i].second.first*-1;
   }
   
   sort(SP.begin(),SP.end());
   
   for(int i=0;i<N;i++){
       cout << SP[i].second.second << endl;
   }
   
   return 0;
}

うわ〜〜〜〜〜〜〜ん悲しい〜〜〜。
とりあえずここまでで、CとDはこれからがんばります!!!!

Outro

#29に続く!(不定期連載です。)

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

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