首页 > 其他分享 >杂题

杂题

时间:2024-04-11 18:34:24浏览次数:23  
标签:nowsum int 负数 maxn 操作 杂题 数量

预计是以后感觉比较有价值并且不好明确分为某一类的题都放在里面

[ABC124D] Handstand

image
每次操作可以对一个子串反转,仔细想一下,不难想到每次应该都是对一个全为0的子串进行反转。因为假如我们将一个串进行操作使其变成全部为1,只对0操作的总操作数是一定是最低的。因为如果对1操作还需要额外多进行操作将1变回来,即使在0比1多的情况下也是如此(0串的数量最多只会比1串多1,在这种情况下操作0的数量和先操作全部再操作1的数量相同)。
然后我们明确我们反转每次只会对一个整体0串处理,这时就可以把所有串分割开并表示为数字的形式来计算他们的贡献。
比如1100这个串里,1的数量是2,0的数量也是2,他们对长度的贡献都相同,那么如何区分呢?我们将0串标记为负数即可。然后将他们各自的贡献存进一个数组里。比如110011110,存到数组里就是2 -2 4 -1.
接下来怎么做?我们知道我们最多有k次对0块进行操作的机会。那么我们就可以维护一个滑动窗口,时刻记录窗口中负数的数量令其不大于k。
然后进队时维护队列的总贡献即可。
坑点:一般来说负数是可以入队的,但当k=0时负数连队都不能入也不能计算贡献,因此需要特判,卡了我挺久

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+10;
int n,k;
int a[maxn],dp[maxn];
char c[maxn];
queue <int> q;
int main()
{
	cin>>n>>k;
	scanf("%s",c+1);
	c[0]='!';
	int s=1,cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(c[i]!=c[i+1])
		{	
			if(c[i]=='0') a[++cnt]=-1*s;
			else a[++cnt]=s;
		    s=1;
		}
		else s++;
	}
	int sum=0,ans=0,nowsum=0;
	for(int i=1;i<=cnt;i++)
	{
		if(a[i]<0)
		{
			if(sum<k) 	{sum++;}
			else 
			{
				while(!q.empty()&&q.front()>0) nowsum-=q.front(),q.pop();
				if(!q.empty())
				{
				nowsum+=q.front();
				q.pop();
			    }
			}
		} 
		if(k!=0||a[i]>0) {q.push(a[i]);nowsum+=abs(a[i]);}
		ans=max(ans,nowsum);
	}
	cout<<ans;
	return 0;
}

标签:nowsum,int,负数,maxn,操作,杂题,数量
From: https://www.cnblogs.com/miku-dayo/p/18129846

相关文章

  • 杂题选讲
    杂题选记写一点比较神奇的杂题。觉得出的都很有心意啊。抽屉原理抽屉原理通常不会在程序中出现,但是这是一个评价复杂度,人肉计算阈值的有时不错的方法。如果你要学习一些十分厉害的抽屉原理,可以翻高中奥林匹克小丛书·组合数学的第二章,上面写着一些比较复杂的抽屉。\(Rams......
  • 2024年4月 杂题记录
    P10322高洁(Purity)设\(d=\prodp_i^{c_i}\),容易发现当\(d\midi^k\)时,\(i^k\)的所有质因子的幂次都不小于\(d\)的所有所有质因子的幂次,即\(i^k\)含有的质因子的幂次至少为\(\lceilc_i/k\rceil\),因此我们设\[f_k(d)=\prodp_i^{\lceilc_i/k\rceil}\]那么就有\(d\mid......
  • 2404 杂题记录
    1.线段树维护gcd查线段树势能提到的一个例题。线段树势能里面强调线段树维护区间gcd的时间复杂度为遍历数组的复杂度+总gcd的时间复杂度,即O(n+logC),均摊到每一个操作上就是O(1+logC/n)=O(1),所以我们可以O(nlogn)解决线段树维护区间gcd。不过网上做法好......
  • 「杂题乱刷」CF74E
    链接妙妙构造题。很容易可以看出要构造出一种可以交换相邻两格数的操作。这部分可以写个爆搜找到规律。然后就AC了。代码也不长。点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++......
  • 「杂题乱刷」at_abc092_d & AT_arc093_b
    链接构造思路:考虑直接构造\(100\times100\)的方格,然后前\(50\times100\)为黑格,后\(50\times100\)为白格,构造形如以下方式即可。#.#.#.#.#.#.#.#...............#.#.#.#.#.#.#.#...............#.#.#.#.#.#.#.#...............#.#.#.#.#.#.#.#....................
  • 3 月杂题 - 下
    gym102503H设\(dp_{i,p,j}\)为填了后\(i\)个卡片,最后一个填的是\(p\)位置,\(j\)个“divinepair”已经确定。转移的话就是,上上个是放在\(p\)的前面还是后面,会有不同的影响。如果放在前面,则上一个\(j'\)是\(j-p+2\),\(dp_{i,p,j}=\sum_{k=1}^{p-1}dp_{i-1,k,j-......
  • 「杂题乱刷」洛谷 P2572
    先上AC代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>usingnamespacestd;#definemapunordered_map#defineforl(i,a,b)for(registerlonglongi=a;i<=b;i++)#define......
  • QOJ杂题合集
    QOJ杂题合集QOJ#151.NiceLinesQOJ#838.HorribleCyclesQOJ#894.LongestLooseSegmentQOJ#895.Color给定一个有\(n\)个节点的无向完全图\(G\),每条边都被染成了\(m\)种颜色中的一种,颜色编号为\(1\simm\)。我们称一个无向完全图合法,当且仅当对于\(\forallx......
  • 「杂题乱刷」洛谷 P1708
    题目链接P1708解题思路解法一:考虑预处理,这部分可以直接打表。其他题解这部分讲的比较详细了,在此不再赘述。期望得分\(100\)分。解法二:考虑数位dp。这里采用记搜的写法。dfs(last,sum,maxsum,_1)分别表示还需要枚举几位数,目前枚举的数位和,可以枚举的最大数位和,是否均......
  • 3 月杂题记
    过了几个月,又回来了,3.7之前的懒得补了。3.7P2487[SDOI2011]拦截导弹最近在学CDQ。花了我好久调试。CDQ优化DP模板。将转移条件转化成三维偏序。在CDQ中求。至于每个点在最长的二维最长升子序列的出现次数,多开一个数组\(f[0/1][i]\)存,转移还是使用树状数组顺带做了......