結果
問題 |
No.2126 MEX Game
|
ユーザー |
![]() |
提出日時 | 2025-05-14 12:58:30 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,485 bytes |
コンパイル時間 | 830 ms |
コンパイル使用メモリ | 75,376 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-05-14 12:59:40 |
合計ジャッジ時間 | 2,622 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 15 WA * 12 |
ソースコード
#include <iostream> #include <vector> #include <map> // Although map is not used, it's a potential alternative if MAX_VAL was very large or unknown // Define the maximum possible value for elements in A and the value x according to the problem statement. const int MAX_VAL = 100000; int main() { // Use fast I/O operations to speed up input reading. std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int N; // Number of elements in the sequence A std::cin >> N; // Create a frequency array (using std::vector) to store counts of each number from 0 to MAX_VAL. // Initialize all counts to 0. The size needs to be MAX_VAL + 1 to cover the index MAX_VAL. std::vector<int> counts(MAX_VAL + 1, 0); // Read the initial sequence A and update the frequency counts. for (int i = 0; i < N; ++i) { int A_i; // Current element of A std::cin >> A_i; // We only need to consider values within the valid range [0, MAX_VAL] as specified. // Values outside this range might exist initially (problem states 0 <= A_i <= 10^5) // or be created, but they don't directly affect the MEX value calculation for MEX <= MAX_VAL + 1. // More importantly, any element can be changed to a value x where 0 <= x <= 10^5. // The game dynamics hinge on counts of values within [0, MAX_VAL]. if (A_i >= 0 && A_i <= MAX_VAL) { // Increment the count for the value A_i. // Optimization: Since the condition only depends on whether the count is < 2 or >= 2, // we can cap the count at 2. This prevents potentially large counts if N is large // and many elements have the same value, although it doesn't change correctness. if (counts[A_i] < 2) { counts[A_i]++; } // The simpler version `counts[A_i]++;` would also work correctly. } } // Find the smallest non-negative integer 'mex' such that its initial count is less than 2. // The logic derived is that Sente can guarantee the final MEX is at least X if and only if // for all k from 0 to X-1, the initial count of k is at least 2. // Therefore, the final MEX under optimal play will be the smallest non-negative integer X // for which the initial count is less than 2. int mex = 0; // Check values 0, 1, 2, ..., up to MAX_VAL. while (mex <= MAX_VAL) { // Check if the count of the current integer 'mex' is less than 2 (i.e., 0 or 1). if (counts[mex] < 2) { // If the count is less than 2, this is the smallest integer for which Sente cannot // guarantee its presence with count >= 2 (based on the 1-vs-1 game logic). // This 'mex' value is the final MEX of the game. break; } // If the count is 2 or more, Sente can guarantee its presence against Gote's attacks. // We continue to check the next integer. mex++; } // If the loop completes without finding any integer up to MAX_VAL with count < 2, // it means all integers from 0 to MAX_VAL have initial counts >= 2. // In this case, the smallest integer not satisfying the condition is MAX_VAL + 1. // The loop correctly results in `mex = MAX_VAL + 1` in this scenario. std::cout << mex << std::endl; // Output the determined final MEX value. return 0; // Indicate successful execution. }