CodeForces - 1363B

题意:输入一个只有1和0组成的字符串,将此字符串变成11111110000000或0000000001111111或0000000或1111111111型的最小改变量。
思路:比如一个字符串长为5,那就枚举变为01111、00111、00011、00001、00000、10000、11000、11100、11110、11111.每个最小改变量即可。只要知道思路,代码不难。但是这思路怎么想到呢!!!难啊,慢慢想想怎么到这个思路,就是说拿到这个题之后,我们该怎么处理给的字符串来求出最小改变量呢,有时候思路就一直是想怎么把这个给的字符串直接变成最小的那一个改变量的字符串,然后直接就得到最小改变量了。这个就要找到最小改变量对应的字符串,怎么找到这个字符串呢,因为字符串就是由1和0组成的,直接暴力枚举变成不同的字符串时的改变量就好了。其实暴力枚举求出最小改变量昨晚想到了,但是在实现方式上太蠢了,就是简单的枚举这个长的不同的good string 不就可以了吗???我当时还转换别的存储形式进行不同方式的加减,简直蠢。可以说我的思路想的太跑题了,把你的思路就放在它给的输入上处理不就好了么。
题外话:1如何将一个string倒叙存储 2.定义int的最大值

//此方法是逆序存储在自身上,存在别的穿上可以赋值到那个串上再reverse
#include <bits/stdc++.h>
#define MAX 0x7fffffff//MAX=2147483647
using namespace std;
int main()
{
    string s;
    cin>>s;
    reverse(s.begin(),s.end());
    cout<<s<<endl;
}
//cf 1363b
#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    cin>>t;
    while(t--){
        string s;
        cin>>s;
        int mm=2147483645;
        int len=s.length();
        for(int i=0;i<len;i++){
            int sum=0;
            for(int j=0;j<i;j++){
                if(s[j]!='1') sum++;
            }
            for(int j=i;j<len;j++){
                if(s[j]!='0') sum++;
            }
            mm=min(mm,sum);
        }
        for(int i=0;i<len;i++){
            int sum=0;
            for(int j=0;j<i;j++){
                if(s[j]!='0') sum++;
            }
            for(int j=i;j<len;j++){
                if(s[j]!='1') sum++;
            }
            mm=min(mm,sum);
        }
        cout<<mm<<endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值