atcoder grand contest 040 F Two Pieces

传送门:https://atcoder.jp/contests/agc040/tasks/agc040_f

sol:

首先 这题我不会

看了官方的题解才会的……这里只是写一下自己的理解x

如果有错可以私聊我qwq

我们现在用(x,d)表示一个状态

这个状态定义为比较大的那个点在x位置,两个点之间的距离是d

接下来我们就可以把操作抽象成如下的三个东西

(I)xd同时1

(II)d 1 [d>=2]

(III)d设为0

接下来我们就考虑先做I操作和II操作

假设我们已经排列好了III操作,考虑怎么把III操作插入这个序列中

考虑III操作能插入的位置

抄一段题解x

the  value  of  d  will  never  be  equal  to  or  less  than  its  current  value  again.

也就是说只能把III插入d不会比后面任何d大的情况操作的后面

在插入完C操作的时候,d的值要是BA

所以我们必须插入III 其中d的值最终是Ak的时候

III的其余NBk1次,插入到最后一次d值变为01...Ak的任何位置。

于是我们考虑枚举一个k

我们可以分开处理操作I和操作II的总方案和插入III的方案

III的操作可以类似catalan数的操作,考虑枚举一个位置不合法之后翻转一下

翻转完之后就可以直接统计

III操作是个经典的隔板

然后就好像做完了x

复制代码
#include <bits/stdc++.h>
using namespace std;
int N,a,b,ans;
int fac[10000005],inv[10000005];
const int fish=998244353;
int Pow(int x,int y){
    int ans=1;
    for (;y;y>>=1,x=1ll*x*x%fish) if (y&1) ans=1ll*ans*x%fish;
    return ans;
}
void Pre(){
    fac[0]=1;
    for (int i=1;i<=10000000;i++)
        fac[i]=1ll*fac[i-1]*i%fish;
    inv[10000000]=Pow(fac[10000000],fish-2);
    for (int i=9999999;i>=0;i--)
        inv[i]=1ll*inv[i+1]*(i+1)%fish;
}
int C(int n,int r){return 1ll*fac[n]*inv[r]%fish*inv[n-r]%fish;}
int catalan(int x,int y){return ((C(x+y,y)-C(x+y,y-1))+fish)%fish;}
int main(){
    Pre();
    scanf("%d%d%d",&N,&a,&b);
    if (b==0){
        cout<<1;
        return 0;
    }
    for (int i=0;i<=min(min(a,N-b),b-1);i++){
        int tot=catalan(b-1,i);
        if (i+b==N){
            if (a==i)
                (ans+=tot)%=fish;
        }
        else {
            int x=N-b-i-1;
            int y=b-i-(b-a)+1;
            (ans+=1ll*tot*C(x+y-1,x)%fish)%=fish;
        }
    }
    cout<<ans;
} 
复制代码

 

posted @   si_nian  阅读(469)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
欢迎阅读『atcoder grand contest 040 F Two Pieces』
点击右上角即可分享
微信分享提示