De.HP

おバイクお出かけお写真とお釣りとおプログラミングとお雑記です。

Atcoder Beginners Contest(A. Fifty-Fifty / B. Ordinary Number / C. Divide the Problems)

解答

A. Fifty-Fifty

atcoder.jp

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

atcoder.jp

普通に 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

atcoder.jp

真ん中の数字の差分が取りうる 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 にしてはわりと時間がかかった。