結果

問題 No.74 貯金箱の退屈
ユーザー hitoyozakehitoyozake
提出日時 2018-08-06 16:56:17
言語 C++17
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 2,518 bytes
コンパイル時間 1,015 ms
コンパイル使用メモリ 92,776 KB
実行使用メモリ 6,692 KB
最終ジャッジ日時 2023-10-19 22:15:13
合計ジャッジ時間 5,386 ms
ジャッジサーバーID
(参考情報)
judge14 / judge11
このコードへのチャレンジ
(要ログイン)

テストケース

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

ソースコード

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::cout << "start" << std::endl;
        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(n, 0);
                
                
                
                s_copy[(0 + coins[i])%n] = (int)!(s_copy[plus%n] == 1);
                s_copy[n - (0 - coins[i])%n - 1] = (int)!(s_copy[minus%n] == 1);
                //print_state(s_copy);
                states_q.push(s_copy);
                
                //std::cout << "*******" << i << "************" << std::endl;
                
            }
            //std::cout << "end" << std::endl;
        }
        else
        {
            continue;
        }
    }

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

    return 0;
}





0