Codeforces Round 904 (Div. 2)赛后总结

A. Simple Design

思路:从x开始枚举。

代码略。。。

B. Haunted House

题目:Codeforces Round 904 (Div. 2)赛后总结_第1张图片

思路:首先我们反转一下字符串,从低位开始遍历字符串。首先我们可以知道输出-1的个数就是我们1的个数。然后我们开始遍历字符串(从地位到高位),遇到0直接输出,我们输出的答案要加上之前的操作数,如果遇到1,那就往后遍历到第一个0的位置,把那个位置变为1,答案增加。具体如代码。

代码:

void solve(){
	int n;cin>>n;
	string s;cin>>s;
	reverse(s.begin(),s.end());
	s=' '+s;
	int idx=1,ans=0;
	int cnt=count(s.begin(),s.end(),'1');
	for(int i=1;i<=n;i++){
		if(n-i

C. Medium Design

题目:Codeforces Round 904 (Div. 2)赛后总结_第2张图片

思路:我们假设idx是数组中的最大值的下标,那么我们可以选择l<=idx<=r的所有区间。我们发现,如果最小值在这个区间外,那么我们的答案加1,如果最小值在这个区间外,我们的答案并不会变小,所有我们的最小值一定出现在1或者m的位置,我们只要把1和m所在区间分别删除,然后求前缀和最大值,就可以得到答案。

代码:

void solve(){
	int n,m;cin>>n>>m;
	mapa,b;
	for(int i=0;i>l>>r;
		if(l>1){
			a[l]+=1;
			a[r+1]-=1;
		}
		if(r

你可能感兴趣的:(c++,算法,数据结构)