結果
| 問題 |
No.74 貯金箱の退屈
|
| コンテスト | |
| ユーザー |
hitoyozake
|
| 提出日時 | 2018-08-06 16:34:42 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,209 bytes |
| コンパイル時間 | 1,088 ms |
| コンパイル使用メモリ | 90,560 KB |
| 最終ジャッジ日時 | 2025-01-06 12:16:35 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 RE * 2 |
| other | RE * 25 TLE * 5 |
ソースコード
#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(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(std::move(s_copy));
}
}
else
{
continue;
}
}
if(found)
std::cout << "Yes" << std::endl;
else
std::cout << "No" << std::endl;
return 0;
}
hitoyozake