Very_Smart_Honet
2024-11-18 15:15:50
统计序列
将第
从头至尾遍历一遍
如果
如果
如果
我们既然已将统计了每个部分的起始坐标,不妨将第
但有个问题,如何去算终点坐标呢?我们在知道第
定义临时变量
我们利用计算终点坐标的公式可以算出第
如果当前坐标的下一个坐标为下一个区间的起始坐标,则更新
本人认为前面已经很详细了,就不再多说了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
string s;
int id[1000010];
int shu[1000010];
int cnt;
signed main()
{
cin>>n>>k;
cin>>s;
int number=0,last=0;
for(int i=0;i<n;i++)
{
if(s[i]=='1')
{
number++;
}
else if(s[i-1]=='1'&&s[i]=='0')
{
id[++cnt]=last;
shu[cnt]=number;
number=0;
}
if(s[i]=='0'&&s[i+1]=='1')
{
last=i+1;
}
}
if(number!=0)
{
id[++cnt]=last;
shu[cnt]=number;
number=0;
}
id[k]=id[k-1]+shu[k-1];
int now=1;
for(int i=0;i<n;i++)
{
if(i>=id[now]&&i<=id[now]+shu[now]-1)
{
cout<<1;
}
else
{
cout<<0;
}
if(i+1==id[now+1])
{
now++;
}
}
return 0;
}
如果大家觉得不错,留个赞再走吧!