A問題
1200 未満かを if文で判定しましょう。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
int main(void){
int x;
cin >> x;
if(x < 1200){ //1200未満なら
cout << "ABC" << endl;
}
else{
cout << "ARC" << endl;
}
}
B問題
最も左にある A
の場所と、最も右にある Z
の場所を調べることによって、解くことができます。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
int main(void){
string s;
cin >> s;
int a = s.size(), z = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] == 'A'){
a = min(a, i); //左の A の位置を記録
}
else if(s[i] == 'Z'){
z = max(z, i); //右の Z の位置を記録
}
}
cout << z - a + 1 << endl;
}
C問題
6点 と 5点 を交互に獲得するのが最善手です。
繰り返しで実装すると、 TLE になってしまいます。
四則演算で、最小の操作回数を求めましょう。 (11 = 5 + 6)
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
int main(void){
long long x;
cin >> x;
long long score = 0, ans = 0;
ans = x / 11 * 2; //この計算で、とりあえず目標点数の少し前までの手数を計算できる
score = ans / 2 * 11;
if(x - score > 6){
ans += 2;
}
else if(x - score <= 6 && x - score != 0){
ans += 1;
}
cout << ans << endl;
}
D問題
まず、取り除くべきカードは、その整数が2枚以上のカードに書かれているものです。
消せるカードの数は必ず偶数枚になるので、消す必要のあるカードの枚数が奇数のときは、消す枚数は $消す必要のあるカード + 1$ となります。
なので、$全体のカードの枚数 - 消す枚数$ で答えを求められます。
#include <bits/stdc++.h>
using namespace std;
//Created by karaju.
int main(void){
int n;
cin >> n;
set<int> card; //どんなかーどがあるかをきろくしておく
int ans = 0;
for(int i = 0; i < n; i++){
int a;
cin >> a;
if(card.find(a) != card.end()){
ans++; //重複のあるカードの数を数えておく
}
card.insert(a);
}
if(ans % 2 == 1) ans++;
cout << n - ans << endl;
}