No.24 数当てゲーム|yukicoder
No.24 数当てゲーム - yukicoder を解きました。
#include <bits/stdc++.h> #define REP(i,n) for(int i=0; i<(n); i++) using namespace std; struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}star; int main() { int N; cin >> N; vector<int> res( 10, 1 ); REP( i, N ) { vector<int> vc(N); REP( j, 4 ) { cin >> vc[j]; } string R; cin >> R; REP( j, 4 ) { if( R == "YES" ) { res[vc[j]] += 1; } if( R == "NO" ) { res[vc[j]] = 0; } } } cout << distance( res.begin(), max_element( res.begin(), res.end() ) ) << endl; return 0; }
・YESの中には必ず解となる数字が含まれている
・NOの中の数字が解になる事はあり得ない
まとめると、全てのYESの中に出現し、NOに一度も出現しない数字が解となる
実装はかなり迷走して、最終的に↑上記コードに落ち着きました(4回くらい書き直した(5提出))
最後のOUTPUTにカウント数が一番多いvectorのindex数を取得したい訳なんですが、
max_element と distance の合わせ技で求まりました(便利!)
//MAX値を取得 auto MAX = max_element( res.begin(), res.end() ); //MAX値が先頭から何番目か取得 auto index = distance( res.begin(), MAX ); //index番号OUTPUT cout << index << endl;
//1行で
cout << distance( res.begin(), max_element( res.begin(), res.end() ) ) << endl;
他にも find で見つけた値に対して distance してindexを取得したり、と大変便利。
STLって楽しい!