結果

問題 No.3752 No Use Crying Over Suffixes
コンテスト
ユーザー GOTKAKO
提出日時 2026-10-02 22:13:23
言語 C++17
(gcc 15.3.0 + boost 1.92.0 + ACL)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 17 ms / 2,000 ms
+ 211µs
コード長 1,806 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,826 ms
コンパイル使用メモリ 227,432 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-10-02 22:13:42
合計ジャッジ時間 5,219 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 35
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;

void solve(){
    map<pair<int,vector<int>>,bool> memo;
    memo[{0,{}}] = false;
    
    for(int len=1; len<=5; len++){
        vector<int> A(len);
        auto f = [&]() -> void {
            bool win = false;
            for(int i=0; i<len; i++){
                auto B = A;
                B.at(i)--;
                if(B.at(i) == 0) B.resize(i);
                if(memo.count({B.size(),B})){
                    if(memo[{B.size(),B}] == false) win = true; 
                }
                else assert(false);
            }
            memo[{A.size(),A}] = win;
        };
        auto dfs = [&](auto dfs,int pos) -> void {
            if(pos == len){
                f();
                return;
            }
            for(int i=1; i<=4; i++) A.at(pos) = i,dfs(dfs,pos+1);
        };
        dfs(dfs,0);
    }
    for(auto [k,v] : memo){
        int sum = 0;
        for(auto v : k.second) cout << v << " ",sum += v; cout << "-> " << v << " ";
        int now = 0,win = -1;
        for(auto v : k.second){
            now += v;
            if(v == 1){
                if(now%2){win = 1; break;}
                else now = 0;
            }
        }
        if(win == -1) win = now%2;
        cout << win << endl;
    }
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int T = 1; cin >> T;
    while(T--){
        int N; cin >> N;
        vector<long long> A(N);
        for(auto &a : A) cin >> a;
        long long now = 0,win = -1;
        for(auto v : A){
            now += v;
            if(v == 1){
                if(now%2){win = 1; break;}
                else now = 0;
            }
        }
        if(win == -1) win = now%2;
        if(win == 1) cout << "Alice\n";
        else cout << "Bob\n";
    }
}
0