ABC134
結果
3完(10:10)
Rated 2109/4713
所感
A: 問題文の通りに実装を行う
B: 一人の監視員で (d * 2 + 1) の範囲をカバーするので、Nを(d * 2 + 1) で割る(切り上げ)
C: 数列Aの最大値が2以上含む場合はすべて最大値,そうでないなら最大値の箇所だけ2番目の最大値を出力
D: 解けなかった…
2019/07/21解いた
提出URL
#include <bits/stdc++.h> using namespace std; int main(){ cin.tie(nullptr); ios::sync_with_stdio(false); int n; cin >> n; vector<int> A(n + 1); for(int i = 0; i < n; i++){ cin >> A[i + 1]; } int m = 0; for(int i = n; i > 0; i--){ for(int j = i + i; j <= n; j += i){ A[i] ^= A[j]; } if(A[i]) m++; } cout << m << endl; for(int i = 1; i <= n; i++){ if(A[i]) cout << i << ' '; } return 0; }
xorが使えるところ,前から後ろに見ていくのが大事
エラトステネスの篩みたいにn * 対数時間な感じでいい感じになる
まとめ
う〜ん…