【codechef】Devu and binary String(字符串不超过连续k个相同,最少改几个,分类)
来源:互联网 发布:java long 长度 编辑:程序博客网 时间:2024/05/22 03:52
Input:32 1112 2114 11001Output:11001121010
http://www.codechef.com/MAY15/problems/DEVSTR
我的思路:一开始的想法是直接暴力枚举1-n位二进制的所有数,不过超时了(20分)
后来的想法是贪心。它的意思是尽量少改几个数,而需要改的地方只有在0或1超过k个的时候,那么在每一段连续的0或1里,我们可以每隔k位设置成相反的数字。当然这里要注意比如1100011这种情况,如果按上面改的话会变成1100111,这个时候就应该把在这一段连续数末尾要改的数提前一位(肯定符合,因为这是以k>=2来考虑的)。k=1与k>1要分开来考虑。
#include<iostream> #include<algorithm> #include<string> #include<map> #include<vector> #include<cmath> #include<queue> #include<string.h> #include<stdlib.h> #include<stdio.h>#define ll long long #define mod 1000000007using namespace std;string x;int main(){int t;cin>>t;while(t--){int n,m;cin>>n>>m;cin>>x;int s1=0,s2=0,s=0;string x1,x2,x3;if(m==1){int s1=0;s2=0;for(int i=0;i<n;++i){if(i%2==0){if(x[i]=='1')s1++;elses2++;}else{if(x[i]=='1')s2++;elses1++;}}if(s1<s2){cout<<s1<<endl;for(int i=0;i<n;++i){if(i%2==0)cout<<0;elsecout<<1;}}else{cout<<s2<<endl;for(int i=0;i<n;++i){if(i%2==0)cout<<1;elsecout<<0;}}cout<<endl;}else{x1=x;x2=x;int i,a=0,b=0;for(i=0;i<n;++i){if(x[i]=='1'){a++;b=0;}else{b++;a=0;}if(a>m){int p=i;if(i<n-1&&x[i+1]=='0'){p--;b=0;a=1;}else{b=1;a=0;}x1[p]=(x[p]=='1'?'0':'1');s++;}else if(b>m){int p=i;if(i<n-1&&x[i+1]=='1'){p--;b=1;a=0;}else{b=0;a=1;}x1[p]=(x[p]=='1'?'0':'1');s++;}}cout<<s<<endl<<x1<<endl;}}return 0;}/*4 7 2110001112 21111010001108 2111111008 211111001*/
0 0
- 【codechef】Devu and binary String(字符串不超过连续k个相同,最少改几个,分类)
- 【codechef】Devu and his Class(巧妙的 模拟,分类讨论)
- 【codechef】Nikhil and Commands(字符串删减,分类)
- C++实现去掉字符串中连续相同K个0子串
- DNA Consensus String 判断变化到相同字符串最少次数
- CodeChef:Girl Friend and String Gift(dp)
- 利用python求数组中连续k个相同值的最大的k
- 长度不超过k的最大连续子序列(单调队列)
- CodeChef:Hasan and boring classes(组合数学 & 字符串)
- 去掉字符串中连续出现k个0的字串
- 去掉字符串当中的连续k个0,Python版
- 删除连续相同的字符串
- POJ 3276 反转开灯问题 每次选取连续k个反转方向 问多少次方向相同
- string.Equals 比较2个字符串是否相同忽略大小写
- HDU 5056 Boring count(不超过k个字符的子串个数)
- -比较第一与第二个字符串,是否有连续的5个字符相同,如果有
- Beautiful String-连续字符串
- 【codechef】Chef and His Friend (甲乙相遇的概率,分类)
- [LeetCode] House Robber
- fragment中的pop显示
- C语言K&R习题系列——使用缓冲区函数接受长字符输入
- Linux虚拟文件系统
- chrome没有注册类解决
- 【codechef】Devu and binary String(字符串不超过连续k个相同,最少改几个,分类)
- 设计模式---外观模式 实例
- HTML5 canvas带渐变色的圆形进度条动画
- 丹阳在逃犯罪人员信息记录查询
- 机器学习算法-朴素贝叶斯Python实现
- 丹阳手机GPS卫星定位追踪找人
- HDOJ 1001:Rightmost Digit(n^n最后一位)
- lua实现cocos多边形碰撞检测
- 手机版本用户不可以缩放网页设置。