首页 > 其他分享 >Codeforces Round 449 (Div. 1) D. Nephren Runs a Cinema 卡特兰数

Codeforces Round 449 (Div. 1) D. Nephren Runs a Cinema 卡特兰数

时间:2023-08-03 21:47:15浏览次数:48  
标签:Runs Cinema int ll cc fac include 卡特兰 define

luogu链接

题意不再赘述。

优先枚举的应该是\(VIP\)用户,枚举范围应该是\([0,n-l]\)

之后总客户数为\(s=n-i\) 再考虑枚举\(100\)的总人数为\(x\) 则要求\(s-2x\in [l,r]\)

这部分方案数应该为从\((0,0)\)到达\((s-x,x)\)且不越过\(y=x\)的方案数。

利用折线法求出方案数为\(C(s,x)-C(s,x-1)\)

由\(s-2x\in [l,r]\)可以解出\(x\in [L,R]\)

则总方案数为\(\sum_{x=L}^RC(s,x)-C(s,x-1)=C(s,R)-C(s,L-1)\)

再利用组合数把\(VIP\)用户合在一起即可。组合数需要特殊处理。

//#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<ctime>
#include<cctype>
#include<queue>
#include<deque>
#include<stack>
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<queue>
#include<deque>
#include<stack>
#include<vector>
#include<algorithm>
#include<utility>
#include<bitset>
#include<set>
#include<map>
#define ll long long
#define db double
#define INF 1000000000
#define inf 100000000000000000ll
#define ldb long double
#define pb push_back
#define put_(x) printf("%d ",x);
#define putl_(x) printf("%lld ",x);
#define get(x) x=read()
#define putl(x) printf("%lld\n",x)
#define rep(p,n,i) for(int i=p;i<=n;i+=1)
#define fep(n,p,i) for(int i=n;i>=p;--i)
#define go(x) for(int i=lin[x],tn=ver[i];i;tn=ver[i=nex[i]])
#define pii pair<int,int>
#define mk make_pair
#define gf(x) scanf("%lf",&x)
#define pf(x) ((x)*(x))
#define uint unsigned long long
#define ui unsigned
#define sq sqrt
#define x(w) t[w].x
#define r(w) t[w].r
#define id(w) t[w].id
#define R(w) s[w].r
#define yy p<<1|1
#define zz p<<1
#define sum(w) t[w].sum
#define mod 1000000007
#define sc(A) scanf("%d",&A)
#define scs(A) scanf("%s",A);
#define put(A) printf("%d\n",A)
#define min(x,y) (x>=y?y:x)
#define max(x,y) (x>=y?x:y)
#define sub(x,y) (x-y<0?x-y+mod:x-y)
#define EPS 1e-7
using namespace std;
const int MAXN=100010,G=(mod+1)>>1;
int n,m,cc,kk,l,r,L,R,top;
int fac[MAXN],v[MAXN][30],inv[MAXN];
int p[MAXN];
inline int ksm(int b,int p)
{
	int cnt=1;
	while(p)
	{
		if(p&1)cnt=(ll)cnt*b%cc;
		b=(ll)b*b%cc;p=p>>1;
	}
	return cnt;
}
inline int C(int n,int m)
{
	if(m>n)return 0;
	if(m<0)return 0;
	if(m==0)return 1;
	int ww=(ll)fac[n]*inv[m]%cc*inv[n-m]%cc;
	rep(1,top,i)
	{
		v[n][i]=v[n][i]-v[m][i]-v[n-m][i];
		int cnt=v[n][i];
		while(cnt)ww=(ll)ww*p[i]%cc,--cnt;
		v[n][i]+=v[m][i]+v[n-m][i];
	}
	return ww;
	
}
signed main()
{
	//freopen("1.in","r",stdin);
	sc(n);sc(m);sc(l);sc(r);kk=cc=m;
	if(m==1){puts("0");return 0;}
	for(int i=2;i*i<=m;++i)
	{
		if(m%i==0)
		{
			p[++top]=i;
			kk=kk/i*(i-1);
			while(m%i==0)
			{
				m/=i;
			}
		}
	}
	if(m>1){p[++top]=m;kk=kk/m*(m-1);}
	fac[0]=inv[0]=inv[1]=fac[1]=1;
	rep(2,n,i)
	{
		int x=i;
		rep(1,top,w)
		{
			v[i][w]=v[i-1][w];
			while(x%p[w]==0)
			{
				x/=p[w];
				++v[i][w];
			}
		}
		fac[i]=(ll)fac[i-1]*x%cc;
		inv[i]=ksm(fac[i],kk-1);
	}
	int ans=0;
	rep(0,n-l,i)
	{
		int s=n-i;
		R=(s-l)/2;
		L=max(0,(s-r+1)/2);
		if(L>R)continue;
		int w=((ll)C(s,R)-C(s,L-1)+cc)%cc;
		ans=(ans+(ll)w*C(n,i))%cc;
	}
	put(ans);
	return 0;
}

标签:Runs,Cinema,int,ll,cc,fac,include,卡特兰,define
From: https://www.cnblogs.com/chdy/p/17604548.html

相关文章

  • 卡特兰数
    概念以下看似毫不相关的问题均属于Catalan数列:\(n\)个节点构成的无标号、区分左右儿子的二叉树数量为\(Cat_n\)\(n\)个节点构成的无标号、区分儿子的有根树数量为\(Cat_{n-1}\)\(n\)个左括号与\(n\)个右括号组成的合法序列有\(Cat_n\)种\(n\)个元素按照大小进......
  • 卡特兰数
    卡特兰数定义卡特兰数非常常见,最为典型的就是给定n个1和n个0排列成为一个2n长度的01序列,要求对于任一个\(1\lek\le2n\)都有从第一个数到第k个数中0的个数都不少于1的个数。求法及其推导我们可以把这个01序列抽象成一个具体的问题:0代表向右走一步,1代表向上走一步,要求一共......
  • cinema 4d下载-c4d软件下载2023中文版-c4d最新版本安装包分享
    c4d(cinema4d)是一款专业好用的三维模型动画创建软件。c4d下载免费中文版可提供建筑模型、游戏角色模型、动画模型等设计模型的创建,还可提供更多建模方案,用球型摄像机渲染虚拟现实,紧跟现今趋势。[下载地址]:后台私信我当前市场需要更多的创意来丰富视觉,传统的平面设计已经不能满足需......
  • 浅谈斐波那契数列和卡特兰数
    斐波那契数列斐波那契数列是我们较为熟悉的一类数列了,在学习递归和递推的时候我们就已经能求解\(n\)较小的情况了;斐波那契数列的定义如下:\[\left\{\begin{matrix}F_{n}=0&n=0\\F_{n}=1&n=1\\F_{n}=F_{n-1}+F_{n-2}&n\ge2\end{matrix}\right.\]卢卡斯数列卢卡斯数列......
  • 网站指纹扫描插件(WhatRuns、Wappalyzer)
    我使用的是Chrome浏览器,需要到应用商店搜索下载WhatRunsWappalyzer......
  • (hdu step 2.3.8)小兔的棋盘(卡特兰数:从左上角走到右上角的路径数)
    题目:     小兔的棋盘TimeLimit:1000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):802AcceptedSubmission(s):502ProblemDescription小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是......
  • cinema 4d r26怎么安装,安装cinema 4d硬件要求
    CINEMA4D具有强大的建模和动画工具,可以帮助用户轻松创建各种三维模型和动画效果。它支持多种建模方法,如多边形建模、NURBS建模、体素建模等等。用户可以使用这些工具创建各种复杂的几何体,并对其进行编辑和调整。CINEMA4D还提供了丰富的材质和纹理库,用户可以在其中选择和应用各......
  • 已知n个数的入栈序列,求一共有多少种出栈序列 (卡特兰数)
    已知\(n\)个数的入栈序列,求一共有多少种出栈序列这个经典问题有两种解法。解法一:设\(f(x)\)为\(x\)个数入栈后,再全部出栈的序列数量假设我们有\(4\)个数\(a,b,c,d\),我们来看\(a\)的出栈顺序.假如\(a\)第一个出栈,那么后面还有\(3\)个数没有出栈,因此方法数是\(f(3)\).假设\(......
  • Maxon Cinema 4D 2023三维动画设计最新版c4d
    MaxonCinema4D2023是一款以渲染软件为基础的图形动画软件集成和工具。MaxonCinema4D2023通过使用丰富的三维图形、视频和软件组件,帮助设计师以更自然的方式创建图形动画。这款动画软件提供了全新的图形功能和更多附加功能,帮助设计师创建更加逼真的图形与视频动画,同时让设计......
  • 卡特兰数
    卡特兰数问题给定\(n\)个\(0\)和\(n\)个\(1\),它们将按照某种顺序排成长度为\(2n\)的序列,它们能排列成的所有序列中,能够满足任意前缀序列中\(0\)的个数都不少于\(1\)的个数的序列有多少个?转化我们将上面的问题进行转化:问:从\((0,0)\)点走到\((n,n)\)点,且只......