結果

問題 No.74 貯金箱の退屈
ユーザー hitoyozakehitoyozake
提出日時 2018-08-06 16:46:13
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 2,287 bytes
コンパイル時間 1,126 ms
コンパイル使用メモリ 93,504 KB
実行使用メモリ 5,376 KB
最終ジャッジ日時 2024-09-19 18:15:43
合計ジャッジ時間 2,206 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
5,248 KB
testcase_01 WA -
testcase_02 AC 2 ms
5,376 KB
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 AC 2 ms
5,376 KB
testcase_16 AC 2 ms
5,376 KB
testcase_17 AC 2 ms
5,376 KB
testcase_18 AC 2 ms
5,376 KB
testcase_19 AC 2 ms
5,376 KB
testcase_20 AC 2 ms
5,376 KB
testcase_21 AC 2 ms
5,376 KB
testcase_22 AC 2 ms
5,376 KB
testcase_23 AC 2 ms
5,376 KB
testcase_24 AC 2 ms
5,376 KB
testcase_25 AC 2 ms
5,376 KB
testcase_26 AC 2 ms
5,376 KB
testcase_27 AC 2 ms
5,376 KB
testcase_28 AC 2 ms
5,376 KB
testcase_29 AC 2 ms
5,376 KB
testcase_30 AC 2 ms
5,376 KB
testcase_31 AC 3 ms
5,376 KB
testcase_32 AC 2 ms
5,376 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <string>
#include <set>
#include <queue>
#include <vector>

void print_state(std::vector<int> const & s){
    //std::cout << "print: " << std::endl;
    for( int i = 0; i < s.size()-1; ++i){
        std::cout << s[i] << ",";
    }

    std::cout << s.back() << std::endl;
}

int main()
{
    int n = 0;
    std::cin >> n;
    std::vector<int> coins;
    std::vector<int> init_state(n, 0);
    for( int i = 0; i < n; ++i )
    {
        int in = 0;
        std::cin >> in;
        coins.push_back(in);
    }

    for( int i = 0; i < n; ++i )
    {
        int in = 0;
        std::cin >> in;
        init_state[i] = in==1;
    }

    std::queue<std::vector<int>> states_q;

    std::set<std::vector<int>> states;
    states_q.push(init_state);
    
    bool found = false;
    int counter = 0;
    while(!states_q.empty()){
        std::vector<int> const s = states_q.front();
        int t = 1;
        for(int i = 0; i < n; ++i )
        {
            t *= s[i];
        }

        if(t==1)
        {
            found=true;
            //states_q.clear();
            break;
        }
        
        //auto const r = states.insert(s);
        states_q.pop();
        if(states.find(s)!=states.end())
        {
            states.insert(s);
        
        //if(r.second){
            //知って�?る盤面ではなかっ�?
            //�?番に盤面を生成してqueueに追�?する
            
            for(int i = 0; i < n; ++i)
            {
                int const plus = 0+coins[i]%n;
                int const minus = n+(0-coins[i])%n-1;
                //std::cout << "plus:" << plus %n << std::endl;
                //std::cout << "minus:" << minus %n << std::endl;
                //std::vector<int> s_copy = s;
                std::vector<int> s_copy = s;
                s_copy[(0 + coins[i])%n] = (int)!(s_copy[plus%n] == 1);
                s_copy[(0 - coins[i])%n] = (int)!(s_copy[minus%n] == 1);
                //print_state(s_copy);
                
                states_q.push(s_copy);
                
            }
        }
        else
        {
            continue;
        }
    }

    if(found)
        std::cout << "Yes" << std::endl;
    else
        std::cout << "No" << std::endl;

    return 0;
}





0