0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

部内バチャ解説 2020.09.10

Last updated at Posted at 2020-09-10

A - Two Coins

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

int main() {
  // 入力部(a,b,c)
  int a, b, c;
  cin >> a >> b >>c;

  // 所持金は a と b の合計
  // この所持金が 価格c 以上なら "Yes", 違うなら "No"
  if(a + b >= c) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
}

A - ι⊥l

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

int main() {
  // 入力部(a,b,c)
  int a, b, c;
  cin >> a >> b >>c;

  // 問題中の比較をそのまま利用してOK
  if(b - a == c - b) {
    cout << "YES" << endl;
  } else {
    cout << "NO" << endl;
  }
}

A - Three-letter acronym

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

int main() {
  // 入力部(s1,s2,s3)
  string s1, s2, s3;
  cin >> s1 >> s2 >> s3;

  // 取得した文字列の1文字目を取得してそれを大文字に変換する。
  // ○○.at(0) で1文字目を char型(一文字のみ) で取得。
  // これから32を引くことで、それぞれの小文字アルファベットに対する大文字のASCIIコードを取得。
  // ここで取得したASCIIコードを数字ではなく、文字として出力するために char型 にキャスト変換する。
  // ちなみに char型 と int型 の演算は char型 が int型 に変換されてから計算される。
  cout << (char)(s1.at(0)-32) << (char)(s2.at(0)-32) << (char)(s3.at(0)-32) << endl;
}

A - Rotation

回答例1 (reverse関数を利用する)

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

int main() {
  // 入力される(c11,c12,c13)をs1, (c21,c22,c23)をs2として入力
  string s1, s2;
  cin >> s1 >> s2;

  // s2をreverse関数を用いて反転させる
  reverse(s2.begin(), s2.end());

  //「s1」と「反転させたs2」が同じなら 'YES' と表示
  if(s1 == s2) {
    cout << "YES" << endl;
  } else {
    cout << "NO" << endl;
  }
}

回答例2 (reverse関数を使用しないパターン)

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

int main() {
  // 入力される(c11,c12,c13)をs1, (c21,c22,c23)をs2として入力
  string s1, s2;
  cin >> s1 >> s2;

  // s1の1文字目(c11) と s2の3文字目(c23) が同じ
  // かつ
  // s1の2文字目(c12) と s2の2文字目(c22) が同じ
  // かつ
  // s1の3文字目(c13) と s2の1文字目(c21) が同じ
  //
  // この条件を満たす時、180°回転させた時に、元のマス目と一致する。
  if(s1.at(0) == s2.at(2) && s1.at(1) == s2.at(1) && s1.at(2) == s2.at(0)) {
    cout << "YES" << endl;
  } else {
    cout << "NO" << endl;
  }
}

B - 81

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

int main() {
  // 入力部(N)
  int N;
  cin >> N;

  // 条件を満たすパターンの数をカウントする変数
  int cnt = 0;

  // 1~9までのループを行う。
  for(int i = 1; i < 10; i++) {

    // iでちょうど割り切れて、Nをiで割った結果が9以下の時、
    // この i と N/iの演算結果 に積は N になり、
    // Nをiで割った結果が9以下なので問題文の条件を満たす。
    if(N % i == 0 && N / i < 10) {
      //cnt(条件を満たすパターンの数をカウントする変数) に1を加算。
      cnt++;
    }
  }

  // cntが0でないなら 'Yes' となる。
  // つまり、1度でもfor文内のif文の条件を満たしているなら 'Yes' と表示。
  if(cnt) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }
}

B - Christmas Eve Eve

回答例1 (sort関数を利用しないパターン)

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

int main() {
  // 入力部(N)
  int N;
  cin >> N;

  // 入力部(p1, p2, ... pN)
  vector<int> p(N);
  for(int i = 0; i < N; i++) {
    cin >> p.at(i);
  }

  // sum は 購入する品物の合計金額。
  // highest は 購入する品物の中で最高価格の景品の価格。
  int sum = 0, highest = 0;

  for(int i = 0; i < N; i++) {
    // sum に 価格の値段を加算。
    sum += p.at(i);

    // highest(現状の探索範囲での最高価格) と 今の景品の価格 を比較し、高い方を highest に格納。
    highest = max(p.at(i), highest);
  }

  // sum(景品の合計金額) からhighest(最高価格の景品の価格)の半額の値 を引く。
  cout << sum - highest/2 << endl;
}

回答例2 (sort関数を利用したパターン)

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

int main() {
  // 入力部(N)
  int N;
  cin >> N;

  // 入力部(p1, p2, ... pN)
  vector<int> p(N);
  for(int i = 0; i < N; i++) {
    cin >> p.at(i);
  }

  // 配列pをソート。
  sort(p.begin(), p.end());

  // 配列pの最後尾(最も定価が高い品物の価格)の半額 を最初から引いておく。
  // 意味的には商品の合計を求める前に割引をしているもの。
  int sum = -p.at(N-1) / 2;

  // 全ての品物の価格を sum に加算。
  for(int i = 0; i < N; i++) {
    sum += p.at(i);
  }

  cout << sum << endl;
}

B - 105

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

int main() {
  // 入力部(N)
  int N;
  cin >> N;

  // 約数をちょうど8つ持つ奇数の個数をカウントする変数。
  int ans = 0;

  // 奇数のみをカウントするので1からスタートして2ずつ増やす。
  for(int i = 1; i <= N; i+=2) {
    // i の約数の個数をカウントする変数。
    int cnt = 0;

    // 1以上i以下の範囲で全探索。
    for(int j = 1; j <= i; j++) {
      // i % j == 0 の場合の時の j は iの約数 である。
      if(i % j == 0) {
        cnt++;
      }
    }

    // 約数がちょうど8個の場合、ansに1を加算
    if(cnt == 8) {
      ans++;
    }
  }

  // ansは 約数をちょうど8つ持つ整数の個数をカウントする変数 なのでそのまま出力。
  cout << ans << endl;
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?