首页 > 其他分享 >[AGC024E] Sequence Growing Hard 题解

[AGC024E] Sequence Growing Hard 题解

时间:2024-01-31 15:00:02浏览次数:34  
标签:ch int 题解 Hard long read Growing Mod define

题目链接

点击打开链接

题目解法

考虑如何添加数,使得 \(\{a_1,...,a_i\}\) 到 \(\{a_1,...,x,a_j,...,a_i\}\) 是合法的
需要手玩一会才能发现合法条件很简单:\(x>a_j\)

考虑对这个进行计数
一个一个添元素是难维护的,现在假设有最终的序列,每个位置有 \((v,dfn)\),分别为值和添加的次序
合法条件是显然的:\(\forall i\in[1,n],v_i>v_{\min\{j,j>i\and dfn_j<dfn_i\}}\) 如果不存在 \(j\),可以默认 \(j=n+1\),\(n+1\) 处为 \((0,0)\)

下面的一步还是比较妙的(参考 tzc 的做法)
我们考虑建树,即由 \(j\to i\) 连边,建出来的树在 tzc 的博客中可以看到
一个添数的方案可以一一对应一棵合法的树
而这棵树仅需满足:父亲的 \(v<\) 儿子的 \(v\),且父亲的 \(dfn<\) 儿子的 \(dfn\)
这是可以 \(dp\) 的
令 \(f_{i,j}\) 表示大小为 \(i\) 的树,且根的 \(v\) 为 \(j\) 的方案数
转移考虑枚举 \(i\) 的子树中 \(dfn\) 第二小的子树大小 \(k\)
转移是显然的:\(f_{i,j}=\sum\limits_{q=1}^{j-1} f_{i-q,j}\binom{i-2}{q-1}\sum\limits_{l=j+1}^k f_{q,l}\)
不难用前缀和优化成 \(O(n^3)\)

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
inline int read(){
    int FF=0,RR=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    return FF*RR;
}
const int N=310;
int n,k,Mod,f[N][N],C[N][N],s[N][N];
inline void inc(int &x,int y){ x+=y;if(x>=Mod) x-=Mod;}
int main(){
    n=read(),k=read(),Mod=read();
    F(i,0,n+1){ C[i][0]=C[i][i]=1;F(j,1,i-1) C[i][j]=(C[i-1][j-1]+C[i-1][j])%Mod;}
    DF(i,k,0) f[1][i]=1,s[1][i]=(s[1][i+1]+1)%Mod;
    F(i,2,n+1) DF(v,k,0){
        F(j,1,i-1) inc(f[i][v],1ll*s[j][v+1]*f[i-j][v]%Mod*C[i-2][j-1]%Mod);
        s[i][v]=(s[i][v+1]+f[i][v])%Mod;
    }
    printf("%d\n",f[n+1][0]);
    return 0;
}

标签:ch,int,题解,Hard,long,read,Growing,Mod,define
From: https://www.cnblogs.com/Farmer-djx/p/17999236

相关文章

  • CF813E Army Creation 题解
    题目链接:CF或者洛谷并不是很难的题,关于颜色数量类问题,那么很显然,沿用经典的"HH的项链"思想去思考问题。由于涉及到了\(k\)个数的限制,我们观察到如果一个数在一个区间上有区间贡献:其中\(x_k\)表示为当前\(x\)的第前\(k+1\)个数,换句话来讲,\(x_k\)到当前的\(x\)所......
  • The XOR-longest Path 题解
    我们观察题干知道此题为单调递增(节点),这样我们就不用跑dfs了很显然的一件事是两点间的权值只与子节点有关所以我们用w1[v]=w1[u]*w就能更新v到根节点的权值然后我们循环放入字典树,再取最大的(由于这题数据特别水,所以没算v-u的w1)#include<bits/stdc++.h>usingnamespacestd;in......
  • 题解 P7309 [COCI2018-2019#2] Kocka
    传送门。题意一个$N\timesN$的矩形,有从四周往内望去的第一个位置的距离,问是否存在一个矩形满足我们的观察。分析先说说我这个蒟蒻想出来的巨麻烦的方法。首先先判断最简单的矛盾,就是左右穿插,上下穿插,这是第一步。//-1变成nfor(inti=1;i<=n;++i)if(L[i]+R[i]>=n)......
  • 题解 P6548 [COCI2010-2011#2] IGRA
    传送门。题意有\(A\),\(B\)两个人,有一个含\(n\)个字符的字符串。\(A\)始终取最右侧的字符,\(B\)可以取任意一个字符,问\(B\)所取的字符串能否胜过\(A\),以及\(B\)能取的最大字符串。分析首先,我们\(A\)肯定会选择当前的最小的字符,我们就可以先把字符按大小排序,字符相......
  • 【题解】CF185D - Visit of the Great
    【题解】CF185D-VisitoftheGreat设\(d=\gcd(k^{2^a}+1,k^{2^b}+1),(a<b)\),则:\[k^{2^a}\equivk^{2^b}\equiv-1(\bmodd)\]所以\[1\equiv(-1)^{2^{b-a}}\equivk^{2^a*2^{b-a}}\equivk^{2^b}\equiv1(\bmodd)\]所以\(d\)为\(1\)或\(2\)。设\(t......
  • RocketMQ应用-消费幂等性问题解决
    重复消费产生原因生产者多次投递-投递时服务端接收后客户端网络原因确认失败,重新投递消费者扩容重试-消费者扩容导致正在消费的消息没有正常应答,服务端重新推送重复消费解决方案给消息增加唯一key,消费时校验key是否已经消费过消费者控制消息的幂等性(多次同样的操作结果一......
  • 9.【题解】计算器
    题解\(BSGS\)(拔山盖世)其实叫\(Baby\)\(Step\)\(Giant\)\(Step\)(大步小步)\(qwq\),事实上还有\(ex\)\(BSGS\),但是这里只写\(BSGS\)。当\(\gcd(x,y)=1\)时,\(BSGS\)可以用\(\sqrtn\)的时间复杂度求解\(\largey^x\equivz\pmodz\)的问题。(原根是\(\largex^a......
  • P6824 「EZEC-4」可乐 题解
    题目链接:可乐一开始想着0-1Trie,枚举\(x\)去写,然后判断就行了。然后想起南京区域赛的C题,其实和这个也有点大同小异的感觉,可以用更朴素的办法,找到对于一个\(a_i\)而言,满足题意的所有\(x\)去\(+1\)。这玩意很容易办到的,稍微讨论下:类似0-1Trie的按位讨论,从高位开始,我......
  • [ARC163D] Sum of SCC 题解
    题目链接点击打开链接题目解法好牛的性质!!!首先一个家喻户晓的性质是:竞赛图缩点之后是一条链考虑从这个上面拓展出一个更优美的性质:竞赛图的\(scc\)个数\(=\)把点集分成两个集合\(A,B\),满足\(\forallu\inA,v\inB\),\(u,v\)之间边的方向为\(u\tov\)的方案数\(-1\)......
  • CF1925B A Balanced Problemset? 题解
    CF1925B题解题目链接CodeforcesLuogu题目大意有一个长度为\(n\)且和为\(x\)的正整数序列,询问该序列可能的最大公因数。多测。简要思路首先先给出结论:最终的答案一定是\(x\)的因数。接下来我通过两种方法证明:一、类似于“更相减损法”一个序列的\(\gcd\)等于......