前言
t
a
g
:
tag:
tag:异或
思维
贪心
*1100
传送门 :
题意 :
给定一个数组,询问 是否可以将数组分为任意段,使得每段中的最长上升子序列的异或值为
0
0
0
思路 :
我们分贪心的分奇偶进行考虑
-
数组长度是偶数
我们将每个数看成一组,那么 1 ⊕ 1 ⊕ . . . 1 = 0 1\oplus 1\oplus...1=0 1⊕1⊕...1=0 -
如果数组长度是奇数的话
我们考虑将奇数提出一个数来,使得剩下的数组变为偶数,即其中一个分组中需要 [ x , y ] [x,y] [x,y]并且 x > = y x>=y x>=y
不知道是不是 A c w i n g Acwing Acwing对 & , ∣ , ⊕ \& ,|,\oplus &,∣,⊕讲的很少的原因(其实也没多少内容要讲)
总之就是对位运算不是很熟悉,位运算的同时牵扯到一些思考,我就感觉是很难的题了
code :
int n;
int a[N];
void solve(){
cin>>n;
for(int i=1;i<=n;i++ ) cin>>a[i];
int cnt = 0 ;
for(int i = 2; i<=n; i++){
if(a[i] <= a[i-1]) cnt++;
}
if(n%2 == 0 || cnt){
cout<<"YES"<<endl;
return;
}
cout<<"NO"<<endl;
}
int main(){
int t;cin>>t;while(t--)
solve();
return 0 ;
}