这是一道难度800的题目,难度不高哈。
原理:其实很简单直接分情况即可,首先最简单的就是全1或者全0,直接不需要调整输出Yes即可。
其次如果字符串长度是奇数,我们总能发现可以相互抵消,奇数一定是一个偶数加上一个奇数得来的,这里奇数偶数是指字符串中'0'或'1'的个数。那么有一个为0数,那么总能把偶数移到一起,两两消除都变化成另一个。例如10101->10011->11111
最后如果字符串长度是偶数的话,那必须保证'1'和'0'的个数是偶数,保证其能全部消除。
其次都输出"No"
说到这里是不是发现有更简单的方法除去全0或者全1的情况,只要'1'和'0'个个数有一个为偶数就能满足条件,代码还能再简化!(通过变换将0都移到一起,1都移到一起,偶数全部抵消即可。)(cnt_1%2!=0||cnt_0%2!=0)输出Yes即可,简化在第二个
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
int cnt_1=0,cnt_0=0;
string s;
cin>>s;
for(int i=0;i<s.length();i++){
if(s[i]=='1'){
cnt_1++;
}else cnt_0++;
}
if(cnt_1==s.length()||cnt_0==s.length()){
cout<<"Yes"<<endl;//一开始就不需要操作
}else if(s.length()%2!=0){//因为奇数一定是一奇一偶相加,偶数个的直接移到一起全部变换即可
cout<<"Yes"<<endl;//是奇数可以实现调整
}else if(s.length()%2==0&&cnt_0%2==0){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int q;
cin>>q;
while(q--)
solve();
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
int cnt_1=0,cnt_0=0;
string s;
cin>>s;
for(char c:s){
if(c=='1'){
cnt_1++;
}else cnt_0++;
}
if(cnt_1%2==0||cnt_0%2==0){
cout<<"Yes"<<endl;
}else{
cout<<"No"<<endl;
}
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int q;
cin>>q;
while(q--)
solve();
return 0;
}

京公网安备 11010502036488号