yukicoder No.360 増加門松列
問題概要
門松行列の判定を複数回行う問題。
解法
7つの数字が与えられる。それを並び替えることによって、左から順に3つずつの数字を見て、それが門松列になっているかを調べる。それを左から右へ一つずつずらして、すべて調べ、すべての場合において門松行列となるものがあるかどうか調べればいい。数字は7個しかないので、next_permutationを利用して、すべての順列を調べればいい。
ミス
門松行列の定義が難しい。(毎回忘れる)
コード
#include <iostream> #include <string> #include <vector> #include <cstdio> #include <algorithm> using namespace std; #define rep(i,n) for(int i=0;i<(n);i++) int main(void){ vector<int> v(7); rep(i, 7) cin >> v[i]; sort(v.begin(), v.end()); do{ for (int i = 0; i < 5; ++i){ if(v[i] < v[i + 2] && v[i] != v[i + 1] && v[i + 1] != v[i + 2]){ if(v[i] > v[i + 1] || v[i + 1] > v[i + 2]){ if(i == 4){ printf("YES\n"); return 0; } } }else{ break; } } }while(next_permutation(v.begin(), v.end())); printf("NO\n"); return 0; }