ABC157 B - Bingo
問題はこちら
atcoder.jp
指針
例によってスマートな解き方が分かりません。
数字表と判定表の2つのビンゴシートを作って穴が開く場所を先に調べ,後からビンゴの成立を調べています。
本問は のビンゴなので何でもないですが, だったりした場合にはビンゴの成立判定を工夫する必要がありそうですね。
コード
#include <bits/stdc++.h> using namespace std; int main(){ vector<vector<int>> a(3,vector<int>(3)); vector<vector<bool>> a_m(3,vector<bool>(3)); for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ cin>>a.at(i).at(j); a_m.at(i).at(j)=false; } } int n; cin>>n; vector<int> b(n); for(int i=0; i<n; i++){ cin>>b.at(i); } bool bingo=false; // ビンゴカードに印をつける for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ for(int l=0; l<n; l++){ if(a.at(i).at(j)==b.at(l)){ a_m.at(i).at(j)=true; } } } } // 縦のビンゴを判定 for(int i=0; i<3; i++){ if(a_m.at(i).at(0)==true && a_m.at(i).at(1)==true && a_m.at(i).at(2)==true){ bingo=true; } } // 横のビンゴを判定 for(int i=0; i<3; i++){ if(a_m.at(0).at(i)==true && a_m.at(1).at(i)==true && a_m.at(2).at(i)==true){ bingo=true; } } // 斜めのビンゴを判定 if((a_m.at(0).at(0)==true && a_m.at(1).at(1)==true && a_m.at(2).at(2)==true) || (a_m.at(2).at(0)==true && a_m.at(1).at(1)==true && a_m.at(0).at(2)==true)){ bingo=true; } if(bingo==true){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } }