ABC149(unrated)の参加記
A問題 Strings
そのまま。問題文読んで順番気をつければいい。
#include<bits/stdc++.h> using namespace std; int main(){ string s,t; cin >> s >> t; cout << t << s << endl; return 0; }
B問題 Greedy Takahashi
問題文から考えられるのは以下の3通り
- 高橋くんも青木くんも食べ残す
- 青木くんだけ残る
- 高橋くんに食べ尽くされる
だからそれを場合分けして書いた。
制約が1012までであることに注意
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main(){ ll a,b,k; cin >> a >> b >> k; //場合分け if(k <= a){//高橋くんも青木くんも余る a -= k; cout << a << " " << b << endl; }else if (k >= a+b)//青木くんだけ余る { cout << 0 << " " << 0 << endl; }else{//食べ尽くされる cout << 0 << " " << (a+b)-k << endl; } return 0; }
C問題 Next Prime
どこからか素数の判定する関数持ってきてfor回すだけ
#include<bits/stdc++.h> using namespace std; bool IsPrime(int num)//素数だけ数えればいいから { if (num < 2) return false; else if (num == 2) return true; else if (num % 2 == 0) return false; // 偶数はあらかじめ除く double sqrtNum = sqrt(num); for (int i = 3; i <= sqrtNum; i += 2) { if (num % i == 0) { // 素数ではない return false; } } // 素数である return true; } int main(){ int x; cin >> x; for(int i=x;;i++){ if(IsPrime(i)){ cout << i; break; } } return 0; }
D問題 Prediction and Restriction
今回は勝ったときだけポイントが入って、あいこと負けは0ポイントであるとこと、問題文が貪欲法を押している気がしたので貪欲法で書いてます。多分。初めて書いた貪欲法なのでこれが貪欲法なのか怪しいです。
k回前と同じ手をだせないということで何を出しても0ポイントで、2k回目のときにkで置き換えたものと同じになったときに面倒なので、あり得ない文字を結果に入れてます。
int型からあふれるのに気づかないで2WA出したのが残念。
#include<bits/stdc++.h> using namespace std; typedef long long ll; char janken(char c){ if(c == 'r'){ return 'p'; }else if (c == 's') { return 'r'; }else if(c == 'p'){ return 's'; }else{ return 0; } } int main(){ ll n,k,r,s,p; cin >> n >> k >> r >> s >> p; string t; cin >> t; vector<char> result; ll total_score = 0; for(int i=0;i<n;i++){ if(i < k){//k回まで result.push_back(janken(t[i])); if(janken(t[i]) == 'r'){ total_score += r; }else if (janken(t[i]) == 's') { total_score += s; }else{ total_score += p; } }else{ if(janken(t[i]) != result[i-k]){ result.push_back(janken(t[i])); if(janken(t[i]) == 'r'){ total_score += r; }else if (janken(t[i]) == 's') { total_score += s; }else{ total_score += p; } }else{ result.push_back('0'); total_score += 0; } } } cout << total_score; return 0; } /* やっほい! やほほい! + * ∧∧ . ∧∞∧ * * ヽ(=´ω`)人(´ω`*)ノ .~( O x.) ( O)~ + 。* ∪ ∪ */
今回の感想
なんか簡単と言われた前回のABCより解けました。というより初Dだったので嬉しかったのですがratedだったらもっと嬉しかったです。