ABC142
所要時間
- 25分ABC3完答,D問途中で分からず
解答メモ
A
- そのまま解けばいいのだが, で求まるのでわざわざ場合分けする必要はなかった.
- あと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; }