题解 | 小红的01串

小红的01串

https://www.nowcoder.com/practice/8920f77fb2c0409a9f4f9025969110de

这是一道难度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;
}
全部评论

相关推荐

01-11 02:09
已编辑
华中师范大学 golang
京京洪洪学java:如果坚定转Java就要先做好暑期结果可能没那么好的准备,大厂也有做go的,也有接受内部切换技术栈的,go怎么就不行了呢?,ACM+华师肯定能接到一些大厂面试的,acm铜的基础可以让你比较轻松地应对中大厂的手撕,就是八股和项目要下硬功夫,至于找不到go项目?github上一直刷啊,跟刷b站主页一样,那么多好的go开源项目,怎么会找不到呢?刷到想学感兴趣的用ai吃透,试着改进或者吸收作为自己的项目,另一个选择就是考研了。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务