首页 > 其他分享 >Educational Codeforces Round 118

Educational Codeforces Round 118

时间:2023-08-28 21:58:01浏览次数:43  
标签:Educational mo ll Codeforces mex add ans include 118

好烦,又是只有三题,讲课的老师实在是太吵了,没法思考细节

A题开始还搞麻烦了
B题纯诈骗,找最小的做y即可
C题直接二分判断即可
D题其实没看多久我就秒了,
对于当前的数x来说无非就是
mex=x-1
mex=x
mex=x+1

\(f[x]\)表示mex=x,后面没有数
\(g[x]\)表示mex=x,后面有x+1,并且只可能是x+1,不可能更大

转移一下即可

被吵到没心态了,不过也从另一方面说明我抗压能力不行,之前在家环境比较轻松,也可以随意走动,也比较随意,思维就比较放松,基本都能写完D,抗干扰能力还要提升。

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<set>
#include<queue>
#include<cmath>
#include<unordered_map>
#include<map>
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define mk(x,y) make_pair((x),(y))
#define A puts("YES")
#define B puts("NO")

using namespace std;
typedef double db;
typedef long long ll;
const ll mo=998244353;
const int N=5e5+5;
ll f[N],g[N],n,a[N],x,ans;
void add(ll &x,ll y){
	x=(x+y)%mo;
}
int main() {
	
//	freopen("data.in","r",stdin);
	int T;
	scanf("%d",&T);
	while (T--){
		scanf("%lld",&n);
		fo(i,1,n) scanf("%lld",&a[i]);
		
		fo(i,0,n+2) f[i]=g[i]=0;
		ans=0;
		fo(i,1,n) {
			x=a[i];
			if (x==0 || x==1) ans++;
			
			fo(j,-1,1) {
				if (x+j>=0) {
					add(ans, f[x+j]);
					if (j!=0) add(ans,g[x+j]);
				}
			}
			
			f[x+1]=f[x+1]*2ll%mo;
			g[x+1]=g[x+1]*2ll%mo;
			add(f[x+1],f[x]);
			
			if (x>0) {
				g[x-1]=g[x-1]*2ll%mo;
				add(g[x-1], f[x-1]);
			}


			if (!x) {
				add(f[1],1);
			}
			if (x==1) {	
				add(g[0],1);
			}
			
		}
		printf("%lld\n",ans);
	}
  	
	return 0;
}  

 

标签:Educational,mo,ll,Codeforces,mex,add,ans,include,118
From: https://www.cnblogs.com/ganking/p/17663460.html

相关文章

  • Codeforces Round 888 (Div. 3)G. Vlad and the Mountains(数据结构,图论)
    题目链接:https://codeforces.com/contest/1851/problem/G 大致题意: 给出n个点m条边的无向图,每个点有点权h【i】。从点i到点j会消耗h【j】-h【i】的能量,如果小于0,那么就是恢复对应绝对值的能量。 进行q次询问,每次询问包含起点s,终点t,能量e,能量在移动过程中不能小......
  • Codeforces Round 887 (Div. 1)C. Ina of the Mountain(数据结构,反悔贪心)
    题目链接:https://codeforces.com/problemset/problem/1852/C 题意: 给定一个长度为n的序列和正整数k; 每次可以选取任意一个区间,将区间内每个数减1; 如果出现一个数变成0,那么那个数变成k; 问至少操作多少次可以使得每个数变成k; 分析: 将每个数值抽象为对应高度的......
  • Codeforces Round 892 (Div. 2)E. Maximum Monogonosity(动态规划,数学)
    题目链接:https://codeforces.com/contest/1859/problem/E 题意: 有长度为n的a和b俩个序列,定义f【l,r】=abs(a【l】-b【r】)+abs(b【l】-a【r】); 给正整数k,求 不相交的区间且  所有  区间的长度 的 和 为k的最大值 是多少? 分析: 这里借鉴一个佬......
  • Educational Codeforces Round 151 (Rated for Div. 2)E. Boxes and Balls(数学,动态规
    题目链接:https://codeforces.com/contest/1845/problem/E 题意: 给定长度为n且只含0和1的数组,你可以进行以下操作: 交换相邻的0和1; 给正整数k,问经过k次操作后,会有多少种本质不同的结果; 分析: 如果1比0多,我们可以把他们取反(让0比1多,结果是一样的) 设计状态dp[i][j......
  • Codeforces Round 885 (Div. 2)E. Vika and Stone Skipping(数学,质因数分解)
    题目链接:https://codeforces.com/problemset/problem/1848/E 大致题意: 打水漂,某人在海岸线以f(正整数)的力量扔出石头,会在f,f+(f-1),f+(f-1)+(f-2),........,f+(f-1)+.....+2+1,的位置接触水面; 现在给出坐标x和q次询问,每次询问给出一个y值,将x=x*y;假设石头在x的位置接触水面,问有多少......
  • Educational Codeforces Round 119
    今天只有3题,有点遗憾,D题几乎一眼切,但是时间不够,分类讨论没写完,vp结束几分钟后写出来。A题开始还以为要并查集,后面发现只有一个N不行B题漏写括号WA一发C题感觉不好写啊,因为直接计算可能会爆,所以要先从后往前,确定边界,然后就是跟普通的填数差不多,二分一下。又是找串,还得特别小心......
  • Codeforces Round 885 (Div. 2) F. Vika and Wiki(数学,倍增)
    题目链接:https://codeforces.com/problemset/problem/1848/F 大致题意:长度为n(n是2的幂次),每轮让a【i】=a【i】^a【i%n+1】,(^为异或)问需要操作多少次后可以使得每个数为0; 解题思路:我们来观察:第一次相当于:a【i】=a【i】^a【i+1】,a【i+1】=a【i+1】^a【i+2】第二次......
  • Educational Codeforces Round 152 (Rated for Div. 2)E. Max to the Right of Min(数
    题目链接:https://codeforces.com/problemset/problem/1849/E 大致题意: 长度为n的序列,求有多少个区间满足区间最大值在区间最小值的右边? 解题思路: (此题有使用线段树等其他做法,本处使用的是单调栈做法) 我们先求出每个a【i】的左边的比他小的LMIN,左边比他大的LMAX,右......
  • Codeforces Round 889 (Div. 1)C. Expected Destruction(期望,动态规划)
    题目链接:https://codeforces.com/problemset/problem/1854/C 大致题意: 有一个集合S,和一个上界m; 现在每秒钟可以进行一次如下操作: 1:等概率的选取S中的一个元素x;2:将x从S中移走;3:如果x+1不大于m并且x+1不在S中,那么添加x+1在S里面 问期望多少秒钟后可以使得S为空集(答......
  • Codeforces Round 889 (Div. 1) B. Earn or Unlock(dp,bitset)
    题目链接:https://codeforces.com/problemset/problem/1854/B 题目大致题意: 有n张卡牌从上到下堆叠,每张卡片有锁或不锁俩种状态,一开始第一张是不锁的;对最上面的卡牌,如果他是不锁的状态,那么可以进行俩种操作:1:从上到下,将v张被锁的卡牌解锁;2:获取v点能量现在求能获得的最大的......