B. Subsequence Hate1400 / 贪心
Posted 幽殇默
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Subsequence Hate1400 / 贪心相关的知识,希望对你有一定的参考价值。
https://codeforces.com/problemset/problem/1363/B
通过分析只能变成一下几种情况:
- 000000
- 1111111
- 000001111
- 1111100
其实00000和11111在上面两个中包含了,不过这样更清晰一点。
用前缀和来维护一段区间有多少个1.
#include<bits/stdc++.h>
using namespace std;
int solve(string s)
{
int cnt1=0;
for(int i=0;i<s.size();i++) if(s[i]=='0') cnt1++;//全1
int cnt2=0;
for(int i=0;i<s.size();i++) if(s[i]=='1') cnt2++;//全0
int ss[1005]={0};//前缀和
s="*"+s;
for(int i=1;i<s.size();i++)
{
if(s[i]=='1') ss[i]=ss[i-1]+1;
else ss[i]=ss[i-1];
}
int cnt3=1e9;//0001111
int n=s.size()-1;
for(int i=1;i<s.size();i++)
{
int len1=ss[i];
int len2=(n-i)-(ss[n]-ss[i]);
cnt3=min(cnt3,len1+len2);
}
int cnt4=1e9;//111000
for(int i=1;i<s.size();i++)
{
int len1=i-ss[i];
int len2=ss[n]-ss[i];
cnt4=min(cnt4,len1+len2);
}
return min({cnt1,cnt2,cnt3,cnt4});
}
int main(void)
{
int t; cin>>t;
while(t--)
{
string s; cin>>s;
cout<<solve(s)<<endl;
}
return 0;
}
以上是关于B. Subsequence Hate1400 / 贪心的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #723 (Div. 2)B. I Hate 1111
Codeforces Round #723 (Div. 2)B. I Hate 1111(完全背包)
Codeforces Round #723 (Div. 2) B. I Hate 1111(找规律,性质)
B. Most socially-distanced subsequence1200 / 思维 贪心 常见模型
B. Most socially-distanced subsequence1200 / 思维 贪心 常见模型
Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence