seriruの技術屋ブログ

競技プログラミングやゲーム開発など技術に関することを発信します

みんなのプロコン2019 A,B

みんなのプロコン2019参戦記です。

A Anti-Adjacency

問題

atcoder.jp

問題概要

1以上  N 以下の整数を  K 個選んだ時, 選んだ整数の任意の  2 つの数の差が  2 以上になる選び方が存在するか。

考察

 1, 3, 5, 7, 9... のように間を  1 つ以上開けて選べば良いので,  K N / 2 より小さいかどうかで判定すれば良いです。

提出コード

#include <bits/stdc++.h>

using namespace std;

int main() {
  int n,k;
  cin >> n >> k;
  int tt;
  if (n % 2 == 1) {
    tt = n / 2 + 1;
  } else {
    tt = n / 2;
  }

  if (k <= tt) cout << "YES" << endl;
  else cout << "NO" << endl;
}

B Path

問題

atcoder.jp

問題概要

 3 本の道と  4 つの街がある。全ての道を一回だけ使うことで  4 つの街を訪れることが可能か。

考察

道が3本しかないので条件を満たす道のパターンは

1 ---- 2 ---- 3 ---- 4

のみです。
したがって、各街に接続している道の本数が  1 本以上かつ  2 本以下なら条件を満たします。

提出コード

#include <bits/stdc++.h>
using namespace std;

int main() {
  map<int,int> mp;

  for (int i = 1; i <= 4; ++i) {
    mp[i] = 0;
  }
  for (int i = 0; i < 3; ++i) {
    int a,b;
    cin >> a >> b;
    mp[a] += 1;
    mp[b] += 1;
  }

  for (auto itr : mp) {
    if (itr.second == 0 or itr.second > 2) {
      cout << "NO" << endl;
      return 0;
    }
  }

  cout << "YES" << endl;
}