結果
問題 | No.1665 quotient replace |
ユーザー |
![]() |
提出日時 | 2021-09-03 21:31:25 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 254 ms / 3,000 ms |
コード長 | 2,170 bytes |
コンパイル時間 | 1,877 ms |
コンパイル使用メモリ | 202,112 KB |
最終ジャッジ日時 | 2025-01-24 04:50:28 |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 41 |
ソースコード
#define _USE_MATH_DEFINES#include <bits/stdc++.h>using namespace std;#define FOR(i,m,n) for(int i=(m);i<(n);++i)#define REP(i,n) FOR(i,0,n)#define ALL(v) (v).begin(),(v).end()using ll = long long;constexpr int INF = 0x3f3f3f3f;constexpr long long LINF = 0x3f3f3f3f3f3f3f3fLL;constexpr double EPS = 1e-8;constexpr int MOD = 1000000007;// constexpr int MOD = 998244353;constexpr int dy[] = {1, 0, -1, 0}, dx[] = {0, -1, 0, 1};constexpr int dy8[] = {1, 1, 0, -1, -1, -1, 0, 1}, dx8[] = {0, -1, -1, -1, 0, 1, 1, 1};template <typename T, typename U> inline bool chmax(T &a, U b) { return a < b ? (a = b, true) : false; }template <typename T, typename U> inline bool chmin(T &a, U b) { return a > b ? (a = b, true) : false; }struct IOSetup {IOSetup() {std::cin.tie(nullptr);std::ios_base::sync_with_stdio(false);std::cout << fixed << setprecision(20);}} iosetup;std::vector<int> prime_sieve(int n, bool get_only_prime) {std::vector<int> prime, smallest_prime_factor(n + 1);std::iota(smallest_prime_factor.begin(), smallest_prime_factor.end(), 0);for (int i = 2; i <= n; ++i) {if (smallest_prime_factor[i] == i) prime.emplace_back(i);for (int p : prime) {if (i * p > n || p > smallest_prime_factor[i]) break;smallest_prime_factor[i * p] = p;}}return get_only_prime ? prime : smallest_prime_factor;}struct osa_k {std::vector<int> smallest_prime_factor;osa_k(int n = 10000000) : smallest_prime_factor(prime_sieve(n, false)) {}std::vector<std::pair<int, int>> query(int n) const {std::vector<std::pair<int, int>> res;while (n > 1) {int prime = smallest_prime_factor[n], exponent = 0;while (smallest_prime_factor[n] == prime) {++exponent;n /= prime;}res.emplace_back(prime, exponent);}return res;}};int main() {int n; cin >> n;vector<int> a(n); REP(i, n) cin >> a[i];osa_k osa(*max_element(ALL(a)));int x = 0;for (int ai : a) {int grundy = 0;for (auto [_, num] : osa.query(ai)) {grundy += num;}x ^= grundy;}cout << (x == 0 ? "black\n" : "white\n");return 0;}