Atcoder Beginners Contest(A. Fifty-Fifty / B. Ordinary Number / C. Divide the Problems)
解答
A. Fifty-Fifty
map で文字の数を数えた。map のサイズと一つの要素の数が 2 であれば、"Yes" になります。
#include<bits/stdc++.h> using namespace std; int main(){ char c; map<char, int> S; for(int i = 0; i < 4; i++){ cin >> c; S[c]++; } if(S.size() == 2 && S[c] == 2){ cout << "Yes" << endl; return 0; } cout << "No" << endl; return 0; }
B. Ordinary Number
普通に for 文でカウントしました。
#include<bits/stdc++.h> using namespace std; int main(){ int n, i, cnt = 0; cin >> n; vector<int> p(n); for(i = 0; i < n; i++) cin >> p.at(i); for(i = 1; i < n - 1; i++){ if((p[i - 1] < p[i] && p[i] < p[i + 1]) || (p[i + 1] < p[i] && p[i] < p[i - 1])){ cnt++; } } cout << cnt << endl; return 0; }
C - Divide the Problems
真ん中の数字の差分が取りうる K の数になります。配列をソートして、真ん中の要素を引き算。
#include<bits/stdc++.h> using namespace std; int main(){ int N, i; cin >> N; vector<int> d(N); for(i = 0; i < N; i++) cin >> d.at(i); sort(d.begin(), d.end()); cout << d.at(N / 2) - d.at(N / 2 - 1) << endl; return 0; }
まとめ
A と B にしてはわりと時間がかかった。