seri::diary::competitive_programming

AtCoderで茶から赤を目指す競プロ精進日記

ABC142

atcoder.jp

所要時間

  • 25分ABC3完答,D問途中で分からず

解答メモ

A

  • そのまま解けばいいのだが,  \frac {(N-N/2)} {N} で求まるのでわざわざ場合分けする必要はなかった.
  • あとstd::setprecisionを初めて使ったが,今回の問題は誤差が10-6という指定だったので解説のようにsetprecision(10) と精度を高めにしておいた方が境界値で変なバグは出さなくて良いかもしれない.
#include <bits/stdc++.h>

#define REP(i, x) for (int i = 0; i < (int)(x); i++)
#define ALL(x) (x).begin(), (x).end()

typedef long long ll;
using namespace std;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  int N;
  cin >> N;

  if(N == 1){
    cout <<setprecision(6) <<  1.0 << endl;
    return 0;
  }

  if(N%2 == 0){
    cout << setprecision(6) << 0.500000 << endl;
  }else{
    cout << setprecision(6) << (((N-1) / 2.0) + 1.0) / N << endl;
  }
  
  return 0;
}

B

  • そのまま解けば良い
#include <bits/stdc++.h>

#define REP(i, x) for (int i = 0; i < (int)(x); i++)
#define ALL(x) (x).begin(), (x).end()

typedef long long ll;
using namespace std;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  int N, K, tmp_h;

  int result = 0;

  cin >> N >> K;
  REP(i, N) {
    cin >> tmp_h;
    if(tmp_h >= K){
      ++result;
    }
  }

  cout << result << endl;
  
  return 0;
}

C

  • 順番を求めよとあるのでsortを疑うが,どの生徒が何番目なのかは決定論的に決まるのでsortする必要はなく,ループを回しながら順序のindexに生徒の番号を格納していけば解ける
#include <bits/stdc++.h>

#define REP(i, x) for (int i = 0; i < (int)(x); i++)
#define ALL(x) (x).begin(), (x).end()

typedef long long ll;
using namespace std;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);

  int N, tmp_a;
  int A[1000001];

  cin >> N;
  REP(i,N){
    cin >> tmp_a;
    A[tmp_a - 1] = i;
  }

  bool first = true;
  REP(i, N){
    if(first){
      cout << A[i] + 1;
      first = false;
    }else{
      cout << " " << A[i] + 1;
    }
  }
  cout << endl;

  return 0;
}

D

  • 自力で解けなかったやつ
  • 互いに素 と出てきた時点で解答は素数だろうという目星がつけられなかった

  • 自力で考えた12 18だけ通るウソ解答

#include <bits/stdc++.h>
#include <numeric>


#define REP(i, x) for (int i = 0; i < (int)(x); i++)
#define ALL(x) (x).begin(), (x).end()

typedef long long ll;
using namespace std;

int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  
  ll A, B;
  cin >> A >> B;

  vector<int> candidates;

  for(int i=1; i < max(sqrt(A), sqrt(B)); ++i){
    if((A % i == 0) && (B % i == 0)){
      candidates.push_back(i);
    }
  }

  ll result = 0;
  for(int i=0; i < candidates.size(); ++i){
    for(int j = i+1; j<candidates.size(); ++j){
      cout << candidates[i] << ":" << candidates[j] << ":" << __gcd(candidates[i], candidates[j])  << endl;

      if(__gcd(candidates[i], candidates[j]) == 1){
        ++result;
      }
    }
  }

  cout << result << endl;

  return 0;
}