首页 > 其他分享 >5.1模拟赛 T3 记录

5.1模拟赛 T3 记录

时间:2024-05-01 21:46:33浏览次数:21  
标签:5.1 cnt int res T3 maxn 模拟 dp mod

题面

首先显然我们可以把序列变成几段连续段,如果连续段中有一个数不一样,显然不满足了。

现在就要求使得这几个连续段都独立不能连成一个大段地方案数,考虑容斥。

考虑进行连续段 \(dp\),套路的,我们只要确认一个段最小的数是什么就可以知道整个段的值域,所以我们只需要确定连续段之间的大小关系就可以确定所有段的值域。

考虑设置 \(dp_{i,j,0/1}\) 表示考虑了前 \(i\) 段,总共形成至多 \(j\) 个独立段,最后一段是否是单个数。(因为单个数后面接的段可以是上升也可以是下降)

转移就考虑是否钦定这一段和前一段连成一个大段,不然大小排名有 \(j\) 种选择,最后容斥即可。

#include <bits/stdc++.h>

using namespace std;

const int maxn=2005;
const int mod=998244353;
int a[maxn],dp[maxn][maxn][3];//表示处理前 i 段,最多连成 j 段,最后一段是否只有一个数。
int b[maxn],cnt=0;

int main(){
	
	int n;
	
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	
	for(int i=1;i<=n;i++){
		b[++cnt]=a[i];
		int t=a[i]-1,j=i;
		while(t){
			j++;
			if(a[j]!=a[i]){
				puts("0");
				return 0;
			}
			t--;
		}
		i=j;
	}
	
	dp[1][1][b[1]>1]=(b[1]>1?2:1);
	
	for(int i=2;i<=cnt;i++){
		int tt=(b[i]>1);
		for(int j=1;j<=i;j++){
			dp[i][j][tt]=(dp[i][j][tt]+1ll*(tt+1)*j%mod*(dp[i-1][j-1][0]+dp[i-1][j-1][1])%mod)%mod;
			dp[i][j][1]=(dp[i][j][1]+(2ll*dp[i-1][j][0]%mod+dp[i-1][j][1])%mod)%mod;
		}
	}
	
	int res=0;
	
	for(int i=cnt;i>=1;i--){
		if((cnt-i)&1) res=(1ll*res-dp[cnt][i][0]+mod-dp[cnt][i][1]+mod)%mod;
		else res=(res+(dp[cnt][i][0]+dp[cnt][i][1])%mod)%mod;
	}
	
	printf("%d\n",res);
	
	return 0;
}

标签:5.1,cnt,int,res,T3,maxn,模拟,dp,mod
From: https://www.cnblogs.com/activeO/p/18169670

相关文章

  • 模拟微任务 判断是否有对应的api
    if(typeofPromise!=='undefined'&&isNative(Promise)){}functionrunMicrotask(func){if(typeofPromise==='function'){Promise.resolve().then(func)return}if(typeofMutationObserver==='functi......
  • 2024.5.1 听课纪录
    今天讲了不少有趣题,但是可惜很多题没有提交入口,不牛。先放个课件吧。度盘Codechef-CyclesAndColorings加强给出一张\(n\)个点\(m\)条边的无向连通简单图,你需要完成以下两个任务的其中一个,输出方案。给出一个三染色方案。找一个奇环,使得删去它后图仍连通。(注意:这里......
  • 2024/5/1 NOIP 模拟赛
    \(T1\)觉得很弱小的字符串,\(Trick\)也比较明显。\(\texttt{T2}\)神仙题。输入\(n\)个数\(\{a\}\),问在\(\{a\}\)中,每个\(a_i\)至多可以减去\(k\)(不能减成\(0\)),至多删去\(f\)个数,求最后合法的公约数\(g\)的全部方案。60考虑如果\(g\)是\(a_i\)的约数,那......
  • 初三奥赛模拟测试5
    初三奥赛模拟测试5点击查看快读快写代码#include<cstdio>usingnamespacestd;//orzlaofudasuan//modifiednamespaceio{ constintSIZE=(1<<21)+1; charibuf[SIZE],*iS,*iT,obuf[SIZE],*oS=obuf,*oT=oS+SIZE-1,c,qu[55];intf,qr; //......
  • YC278A [ 20240420 CQYC省选模拟赛 T1 ] 作画(paint)
    题意给定排列\(S\),最初\(S_i=i\)。每次进行以下操作,进行\(t\)次。选择下标\(i,j\),使得\(S_i=S_j\)。求进行\(t\)次后,\(S\)有至少\(k\)种数字的概率。\(n\le10,t\le10^{18}\)。Sol考虑概率转方案,变为有多少种方案使得最终状态有\(k\)种数字。不......
  • GPT3-探索指南(三)
    GPT3探索指南(三)原文:zh.annas-archive.org/md5/e19ec4b9c1d08c12abd2983dace7ff20译者:飞龙协议:CCBY-NC-SA4.0第九章:构建一个由GPT-3提供动力的问答app到目前为止,我们已经查看了(并编写了)很多代码。但我们实际上还没有创建一个完全可用的app。那就是我们将要做的事情。......
  • 统信 qt5.15.2安装
    mount挂载windows(dai)共享文件夹参考:https://www.cnblogs.com/LiuYanYGZ/p/12043945.html$cd/data/home/uos01/$mkdirwindows_share$sudomount-tcifs-ousername=share,password=share//192.168.11.111/share./windows准备要装环境的路径$cd/data/home/uos......
  • 模拟集成电路设计系列博客——6.1.4 有符号输出
    6.1.4有符号输出对于需要负输出电压的应用,电阻串的底部可以连接到\(-V_{ref}\)。则需要提供一个负的供电,并且电路需要实现带有精确匹配的双电源,否则任何匹配上的误差都会引发失调。许多D/A转换器的论文都默认\(-V_{ref}\)存在,但没有解释如何获得。如果通过片外来获得这个电压,那......
  • 模拟集成电路设计系列博客——6.1.3 多电阻串DAC
    在这一小节中,会介绍另一种电阻串DAC的变体,如下图所示[Holloway,1984]:第二个电阻串被连接在连接第一个电阻串的两个相邻节点的缓冲器之间。在如图所示的6-bit例子中,三比特MSB决定了哪两个第一个电阻串的相邻节点被连接到两个中介的缓冲器。第二个电阻串线性采样第一个电阻上的两......
  • golang将uint32与byte[]互转
    packagemainimport( "encoding/binary" "fmt")funcmain(){ //一个长度为4的byte切片,表示一个负数 bytes:=[]byte{0xFF,0xFF,0xFF,0xFF} //将byte切片转换为int32 num:=int32(binary.BigEndian.Uint32(bytes)) fmt.Printf("Byte切片转换为Int32:%d......