首页 > 其他分享 >「杂题乱刷」CF283A

「杂题乱刷」CF283A

时间:2023-11-23 20:44:56浏览次数:34  
标签:opt gs cin CF283A pd ans 序列 杂题

原题链接

CF283A Cows and Sequence

题目简述

给定一个初始为空的序列 \(a\),并给出 \(3\) 种操作方式:

  1. 将 \(a_1 \sim a_x\) 均加上 \(y\);

  2. 将 \(a\) 序列末尾增加一个正整数 \(x\);

  3. 将 \(a\) 序列的最后一个数字给去掉;

现在要求你求出进行每一次操作后的序列 \(a\) 的所有数的平均数。

解题思路

首先,这道题直接暴力模拟肯定是不行的,所以稍微思考一下,就会发现,这一道题可以通过标记的方法来做,并将每种操作的方法变通一下,所以,我们对于第 \(i\) 种操作:

  1. 重新定义一个标记数组 \(pd\),将 \(pd_x\) 加上 \(y\),但如果第 \(x\) 项被清除了该怎么办呢?其实,只需要将 \(pd_x\) 转移至 \(pd_{x-1}\) 就可以了,因为操作的时候,是将 \(a_1 \sim a_x\) 均加上 \(y\),所以,这样写的话,最终的结果是不会变化的;

  2. 直接将序列末尾加上 \(x\),然后计算平均数即可;

  3. 对于这一步,我们可以先将序列数字总和减去最后一个数字的最初值以及标记,然后再将 \(pd_x\) 转移至 \(pd_{x-1}\),最后再求出整个序列的平均数即可。

参考代码

#include<bits/stdc++.h>
using namespace std;
#define QwQ return 0;
long long gs=1,sz[1000010],pd[1000010],ans,n,opt,a,b;
int main()
{
	cin>>n;
	while(n--)
	{
		cin>>opt;
		if(opt==1)
			cin>>a>>b,pd[a]+=b,ans+=a*b;//将答案加上将每个数字加上的数字总和,注意,这里需要标记一下
		else if(opt==2)
			cin>>a,sz[++gs]=a,ans+=a;//这里直接模拟删除序列中的最后一个数字
		else
			ans-=sz[gs]+pd[gs],pd[gs-1]+=pd[gs],sz[gs]=0,pd[gs]=0,gs--;//这里注意要将最后一个数字的初始值以及标记归零
		cout<<fixed<<setprecision(10)<<1.0*ans/gs<<endl;//输出序列所有数字的平均数
	}
	QwQ;
} 

标签:opt,gs,cin,CF283A,pd,ans,序列,杂题
From: https://www.cnblogs.com/wangmarui/p/17852451.html

相关文章

  • 「杂题乱刷」洛谷P9253
    题目链接P9253[PA2022]Ornitolog2题目简述给定一个音高序列,输出最少要修改多少整数才能使这个序列成为交替鹡鸰鸟鸣的音高序列。题意分析操作后的音高序列总共有\(2\)种可能:音量由高变低再由低变高;音量由低变高再由高变低。又因为大小范围是\(10^4\times5......
  • 10月杂题
    还是得写写杂题,初三赛季说明这对我是buff啊。这次CSP-S再次检验王者是超级debuff!!!1.P7830[CCO2021]ThroughAnotherMazeDarkly感受一下,每次从根开始绕一圈回去,这个圈会越来越大,直到大小变成\(n-1\)。考虑求出每个边在最后一个圈内入和出的时间(就是欧拉序),你会发现每......
  • 11月杂题
    1.10.30D/qoj6794SequencetoSequence先观察到我们一定是先减后加。因为对于一个数+1-1一定不会改变,但-1+1就会有改变。那对于相邻的+1-1操作,如果不交就直接交换;否则把相交的部分直接删掉,那要么删成两个+1,要么成两个-1,要么是不交的+1-1。如果我们指定一个数减......
  • 9月杂题
    为什么19号了才开始写杂题1.ZJOI2018胖考虑一个新增边能松哪些点。它会被其它新增边影响。感受一下,松的范围一定是一个区间。如果\(|x-x_i|>|x-x_j|\)且\(b_i+|s_x-s_{x_i}|>b_j+|s_x-s_{x_j}|\),\(i\)就松不到\(j\)。二分边界,RMQ判断即可。以左端点为例,\([mid,i]\)......
  • 2023-11-17 杂题乱写
    倍增的英语怎么说。TasksbelowarefinishedyesterdayinYuhuiChe'sroom(Whenhewaswatchinguglygirls.).I'llwritethesolutioninthisblogbecausethecodingworkwasaccomplishedjustnow.CF461ENoBinarySearch.Iflettersin\(\{A,B,C,D\}\......
  • 2023.11.16 近期杂题
    CF1794E我们现在考虑换根dp,维护每个点为根的深度集合。考虑哈希,我们令深度为\(d\)的点贡献是\(base^d\)。那么,\(f_u=1+\sumf_v\timesbase\)。换根时容易的。由于题目给的是大小为\(n-1\)的集合,我们判断两个集合哈希值的差是否是\(base\)的幂即可。CF1799G考虑容斥......
  • 2023.11.12 近期杂题
    CF1657E发现充要条件即为对于每个点\(i\),其与\(1\)的连边为其所有连边中最小的。这\(dp_{i,j}\)表示处理了\(i\)个点,当前与\(1\)连的最大的边长度是\(j\)。\(dp_{i,j}=\sum_{t=1}^{i-1}(\sum_{x=0}^{j-1}dp_{t,x})\timesC_{n-t}^{i-t}\times(k-j+1)^{(i+t-3)(i-t)/......
  • 【杂题乱写】AtCoder-ARC116
    AtCoder-ARC116_CMultipleSequences朴素DP是设\(f_{i,j}\)表示第\(i\)个位置填\(j\)的方案数,时间复杂度\(O(n^2\logV)\)。考虑求出元素都不同序列个数,再根据长度乘组合数,这样长度是\(O(\logV)\)的,复杂度\(O(n\log^2V)\)。提交记录:Submission-AtCoder......
  • 2023.11.8 近期杂题
    CF1797E设\(f(x,y)\)表示\(x,y\)要相同最大的变成多少。由于\(\varphi\)最多只需要做\(\log\)次就可以到\(1\),所以这是可以直接暴力的。我们现在只需维护区间\(f\)的值,外加区间取\(\varphi\)。区间取\(\varphi\)暴力。使用”小清新“线段树,或者用并查集。复杂......
  • AT杂题
    1.ATABC169F[ABC169F]KnapsackforAllSubsets思路:考虑对于任意一个集合\(P|P\inT\)\(P=\{x1,x2,\cdotsxk\}\A[x1]+A[x2]+\cdotsA[xk]=S\)则其对答案的贡献为\(2^{n-len}\)则可以设\(dp[i][j]\)表示前\(i\)个数中,和为\(j\)的答案则可以列出转移方程\(dp[i......