Codeforces Round #627 (Div. 3) A

题意 :

有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
";
    else cout<<"NO
";
}
 
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
";
        return;
    }
    for(int i=0;i<n-1;i++){
        if(a[i]==0){
            if(a[i+1]==1){
                cout<<"NO
";
                return;
            }
            i++;
        }
    }
    cout<<"YES
";
}
 
int main(){
    int t;cin>>t;
    while(t--)
        solve();
    return 0;
}
原文地址:https://www.cnblogs.com/Kanoon/p/12483910.html