P9687 Maps.题解
P9687 Maps.题解
题目意思:
每组数据里,
大致思路:
我们先不来管不能满足要求的,看满足条件,我们可以先判断长度
代码实现:
#include<bits/stdc++.h>
using namespace std;
long long t,a[1000001],l;
long long n,p,cnt;
int main(){
cin>>t;
for(int i=1;i<=t;i++){
cin>>n>>p;
int o=n;
if(p*2>=n){//没有满足条件的
cout<<-1<<endl;
}else{
memset(a,0,sizeof a);
l=0;
int k=1;//判断奇偶性的
if(n%2==0){
a[1]=0;
k++;
}
for(int j=k;j<=n;j++){
if(a[j-1]==0){
a[j]=1;//10交错
}else{
a[j]=0;//10交错
}
}
cnt=0;
for(int j=n;j>=1;j--){
if(j==n||j==1) continue;//防止越界
if(a[j]==0&&a[j-1]==1&&a[j+1]==1){//看看满不满足101子串条件
cnt++;//数量加1
if(cnt>p){
l=j;
break;//直接结束
}
}
}
for(int j=1;j<=n;j++){
if(l==0){//特判,如果没有多余
cout<<a[j];
continue;
}
if(j<=l){
cout<<0;//输出
}else{
cout<<a[j];//输出
}
}
cout<<endl;//换行
}
}
return 0;
}
这样,一道普及的题目就解决啦!
希望能给大家带来一些好的思路!!!