D
题目大意:
给出的是二进制字符串,问最小有几个0101…/1010…字串。
解题思路:
当时写的时候一直想要循环循环,毫无疑问超时了
看到大佬的题解(原谅我还没有强到直接看代码),只是稍微一指点:用两个队列,就会了。
具体AC代码:
#include<bits/stdc++.h>
using namespace std;
int a[200050];
int main()
{
int t;
cin>>t;
while(t--)
{
queue<int> q0,q1; //q0:现在是0,q1:现在是1
int n;
cin>>n;
string s;
cin>>s;
int k=1;
for(int i=0;i<n;i++)
{
if(s[i]=='0')
{
if(q1.empty())
{
q0.push(k);
a[i]=k;
k++;
}
else
{
a[i]=q1.front();
q0.push(q1.front());
q1.pop();
}
}
else
{
if(q0.empty())
{
q1.push(k);
a[i]=k;
k++;
}
else
{
a[i]=q0.front();
q1.push(q0.front());
q0.pop();
}
}
}
cout<<k-1<<endl;
for(int i=0;i<n;i++)
{
cout<<a[i];
if(i!=n-1)cout<<' ';
}
cout<<endl;
}
}
考点:数据结构
E1
考点:图论,数据结构
稍后再补。