Codeforces Round #627 (Div. 3) A - Yet Another Tetris Problem(逻辑)
题意 :
有n个高度,可以使任一高度加二任意次,问最终n个高度可否相同。
思路:
因为添加的2x1的方块不可旋转,只需考虑所有高度是否为同一奇偶性即可。
#include <bits/stdc++.h> using namespace std; void solve(){ int n;cin>>n; int a[n],sum=0; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) sum+=a[i]&1; if(sum==0||sum==n)cout<<"YES\n"; else cout<<"NO\n"; } int main(){ int t;cin>>t; while(t--) solve(); return 0; }
拓展:
若可以旋转,原数组奇为1,偶为0,看是否同奇偶或0两两相邻即可。
#include <bits/stdc++.h> using namespace std; void solve(){ int n;cin>>n; int a[n]; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) a[i]&=1; int sum=accumulate(a,a+n,0); if(sum==0||sum==n){ cout<<"YES\n"; return; } for(int i=0;i<n-1;i++){ if(a[i]==0){ if(a[i+1]==1){ cout<<"NO\n"; return; } i++; } } cout<<"YES\n"; } int main(){ int t;cin>>t; while(t--) solve(); return 0; }