题目链接

题目大意

给你一个长为n的01串,要你使得每一个01串中0和1的个数都要相等,01串中有?字符,你可以使得这个字符变为0或1,要你求是否可以满足条件。输出YES或NO

题目思路

这个题目的难度其实不大,但是最主要的问题是你要发现s[i]=s[i%k],然后就变的简单了,具体实现看代码

代码

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<unordered_map>
#define fi first
#define se second
#define debug printf(" I am here\n");
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int maxn=3e5+5,inf=0x3f3f3f3f,mod=1e9+7;
const double eps=1e-10;
int n,k;
char s[maxn];
signed main(){
int _;
scanf("%d", &_);
while(_--){
scanf("%d%d", &n,&k);
scanf("%s",s+1);
bool flag=1;
int zer=0,one=0;
for(int i=1;i<=k;i++){
char ch='2';
for(int j=i;j<=n;j+=k){
if(s[j]=='?'){
continue;
}else {
if(ch=='2'){
ch=s[j];
}else if(ch!=s[j]){
flag=0;
break;
}
}
}
if(!flag) break;
if(ch=='1'){
one++;
}else if(ch=='0'){
zer++;
}
}
if(2*max(zer,one)>k){//不能超过一半的元素
flag=0;
}
printf(flag?"YES\n":"NO\n");
}
return 0;
}

最新文章

  1. java太low,又舍不得jvm平台的丰富资源?试试kotlin吧(一)
  2. WPF学习系列 绘制旋转的立方体
  3. Python迭代器,可迭代对象,生成器
  4. [ASP.NET MVC 小牛之路]01 - 理解MVC模式
  5. UI测试 错题分析
  6. 高性能网络编程(一)----accept建立连接
  7. 未进入Kali Linux系统修改修改密码的方法
  8. JavaScript 的同源策略
  9. jmeter的使用(四)
  10. C#泛型接口
  11. 关于封装unity3d的dll时候的进一步总结
  12. 2013=10=19 ENGLISH 翻译
  13. react相关
  14. cocos2d 缓存池 对象的再利用
  15. hdu 2149 Public Sale 简单博弈
  16. Python从json中提取数据
  17. NodeJs通过镜像下载相关NPM模块
  18. 使用Dockerfile创建一个tomcat镜像,并运行一个简单war包
  19. netcore程序部署到docker
  20. 【Selenium】【BugList11】启动selenium server报错:Unsupported major.minor version 52.0

热门文章

  1. k8s部署之系统初始化(一)
  2. mq_open失败,Invalid argument
  3. mysql数据库——事务隔离级别
  4. python解决百钱买百鸡
  5. 面试小问题——Object中有哪些常用方法?
  6. linux修改ssh远程端口22
  7. C#3新增语法特性
  8. .NetCore HttpClient发送请求的时候为什么自动带上了一个RequestId头部?
  9. Java安全之JNDI注入
  10. Shell 筛选符合条件的 ELF 文件