結果
問題 | No.2518 Adjacent Larger |
ユーザー | pointN |
提出日時 | 2023-10-27 22:01:17 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 19 ms / 2,000 ms |
コード長 | 2,937 bytes |
コンパイル時間 | 3,417 ms |
コンパイル使用メモリ | 191,440 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-09-25 14:07:36 |
合計ジャッジ時間 | 4,620 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 28 |
ソースコード
#include <iostream> #include <string> #include <vector> #include <algorithm> #include <functional> #include <cmath> #include <iomanip> #include <stack> #include <queue> #include <numeric> #include <map> #include <unordered_map> #include <set> #include <fstream> #include <chrono> #include <random> #include <bitset> #include <atcoder/all> #define rep(i,n) for(int i=0;i<(n);i++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) ((int)(x).size()) #define pb push_back using ll = long long; using namespace std; template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; } template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; } ll gcd(ll a, ll b) {return b?gcd(b,a%b):a;} ll lcm(ll a, ll b) {return a/gcd(a,b)*b;} void solve(){ int N; cin >> N; vector<int> A(N); rep(i,N) cin >> A[i]; int f = 1; int c0 = count(all(A),0); int c1 = count(all(A),1); int c2 = count(all(A),2); if(c1>=N-1) f=0; if(c0==0) f = 0; if(c2==0) f = 0; if(c2!=c0) f = 0; rep(j,N){ if(A[j]==A[(j+1)%N] && A[j]!=1) f=0; } vector<int> B = A; rep(j,N) B.pb(A[j]); rep(j,N){ if(B[j]==2){ int k = j+1; int c0 = 0; while(B[k]!=2){ if(B[k]==0) c0++; k++; } if(c0==0){ f = 0; break; } } } if(f) cout << "Yes\n"; else cout << "No\n"; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while(T--) solve(); return 0; } /* int main(){ int N = 9; vector<int> v(N); rep(i,N) v[i]=i; set<vector<int>> st1,st2; do{ vector<int> A(N); rep(i,N){ int c = 0; if(v[(i+1)%N] > v[i]) c++; if(v[(i-1+N)%N] > v[i]) c++; A[i] = c; } st1.insert(A); }while(next_permutation(v.begin(), v.end())); int l = 1; rep(i,N) l *= 3; rep(i,l){ int n = i; vector<int> A(N); rep(j,N){ A[j] = n%3; n /= 3; } int f = 1; int c0 = count(all(A),0); int c1 = count(all(A),1); int c2 = count(all(A),2); if(c1>=N-1) f=0; if(c0==0) f = 0; if(c2==0) f = 0; if(c2!=c0) f = 0; rep(j,N){ if(A[j]==A[(j+1)%N] && A[j]!=1) f=0; } vector<int> B = A; rep(j,N) B.pb(A[j]); rep(j,N){ if(B[j]==2){ int k = j+1; int c0 = 0; while(B[k]!=2){ if(B[k]==0) c0++; k++; } if(c0==0){ f = 0; break; } } } rep(j,N){ if(A[j]==1 && A[(j-1+N)%N]==2 && A[(j+1)%N]==2) f=0; } if(f) st2.insert(A); } for(auto s:st1){ if(!st2.count(s)){ rep(i,N) cout << s[i] << ' '; cout << endl; } } cout << endl; for(auto s:st2){ if(!st1.count(s)){ rep(i,N) cout << s[i] << ' '; cout << endl; } } cout << sz(st1) << ' ' << sz(st2) << endl; cout << (int)(st1 == st2) << endl; } */