1015 模拟赛

Posted cbyyc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1015 模拟赛相关的知识,希望对你有一定的参考价值。

写在前面

今天突然考数论(雾,有点懵。。

出题人很有意思技术图片

T1煎蛋的疑惑(excatalan)

链接

Idea

看题的名字——$excatalan o$扩展$Catalan$/类$Catalan$?

于是向$Catalan$数列上想

发现对于$m=0$时,(Ans=excatalan(n,0)?)

对于其他情况,(Ans=excatalan(n,m)-excatalan(n,m-1)?)

别问我,我不知道。。。。。。

我,我不知道。。。。。。

不知道。。。。。。

。。。。。。

附上考场代码。

测完发现 报负了。。。技术图片

于是进行改正

Code

//报负
ll f[maxn<<1],inv[maxn<<1];
inline ll power(int a,int b){
	ll ans=1;
	for(;b;b>>=1){
		if(b&1) ans=(ll)ans*a%mod;
		a=(ll)a*a%mod; 
	}
	return ans;
}
inline ll Cal(int x,int y){
	if(x<y) return 0;
	if(x<0||y<0) return 0;
	return (ll)f[x]*inv[y]%mod*inv[x-y]%mod;
}
inline ll C(int x,int y){
	return (ll)(Cal(x*2,x)-Cal(x*2,x-y-1))%mod; 
}
int main(){
//	freopen(File".in","r",stdin);
//	freopen(File".out","w",stdout);
	int n=read(),m=read();
	f[0]=1; 
	for(int i=1;i<=n*2;i++) f[i]=f[i-1]*i%mod;
	inv[n*2]=power(f[n*2],mod-2);
	for(int i=n*2;i;i--) inv[i-1]=inv[i]*i%mod;		 
	if(m==0) printf("%lld",C(n,0));
	else printf("%lld",(C(n,m)-C(n,m-1)+mod)%mod);
	return 0;
} 
ll f[maxn<<1],inv[maxn<<1];
inline ll power(int a,int b){
	ll ans=1;
	for(;b;b>>=1){
		if(b&1) ans=(ll)ans*a%mod;
		a=(ll)a*a%mod; 
	}
	return ans;
}
inline ll Cal(int x,int y){
	if(x<y) return 0;
	if(x<0||y<0) return 0;
	return (ll)f[x]*inv[y]%mod*inv[x-y]%mod;
}
inline ll C(int x,int y){
	return (ll)(Cal(x*2,x)-Cal(x*2,x-y-1)+mod)%mod; 
}
int main(){
//	freopen(File".in","r",stdin);
//	freopen(File".out","w",stdout);
	int n=read(),m=read();
	f[0]=1; 
	for(int i=1;i<=n*2;i++) f[i]=f[i-1]*i%mod;
	inv[n*2]=power(f[n*2],mod-2);
	for(int i=n*2;i;i--) inv[i-1]=inv[i]*i%mod;		 
	if(m==0) printf("%lld",C(n,0));
	else printf("%lld",(C(n,m)-C(n,m-1)+mod)%mod);
	return 0;
} 

T2蘑菇(shimeji)

链接

Idea

思考题答案:蘑菇的拟态日常技术图片

这道题让求了个 期望混乱度,cb不会期望$QAQ$。

于是我打了个随机化,输出了样例。。。技术图片技术图片

Code


T3墙(wall)

链接

Idea

设 $f[i]$代表以 $a[i]$为终点,上一个数大于 $a[i]$的方案数。$g[i]$代表上个数 小于 $a[i]$的方案数。转移时先按 $a[i]$从小到大枚举 (i),再按 $a[j]$从大到小枚举 (j), 若$j lt i$ ,用$f[j]$更新$g[i]$,否则用$g[i]$更新$f[j]$。

时间复杂度$O(n^2)$,空间为$O(n)$。

然后,就没了技术图片

Code

int n,mod,ans;
int f[maxn],g[maxn];
int a[maxn],b[maxn];
inline void change(int &x,int y){
	x+=y;
	if(x>=mod) x-=mod;
}
int main(){
//	freopen(File".in","r",stdin);
//	freopen(File".out","w",stdout);
	n=read(); mod=read();
	for(int i=1;i<=n;i++){
		a[i]=read();
		b[a[i]]=i;	
	}
	//mem(f,1); mem(g,0);//不知道为什么,我宏定义的memset挂了。。。
	for(int i=1;i<=n;i++) f[i]=1,g[i]=0;
	for(int i=1;i<=n;i++)
	for(int j=i-1;j;j--)
	if(b[j]<b[i]) change(f[i],g[j]);
	else change(g[j],f[i]);
	for(int i=1;i<=n;i++) change(ans,f[i]);
	
	//mem(f,0); mem(g,1);
	for(int i=1;i<=n;i++) f[i]=0,g[i]=1;
	for(int i=1;i<=n;i++)
	for(int j=i-1;j;j--)
	if(b[j]<b[i]) change(f[i],g[j]);
	else change(g[j],f[i]);
	for(int i=1;i<=n;i++) change(ans,g[i]);
	
	change(ans,mod-n%mod);
	printf("%d",ans);
	return 0;
}
[ The quad End ]
[ ext{人生只不过,一场厮杀。赤血染黄沙,青春成白发。若是真英雄,怎会怕。-《真英雄》张卫健} ]

以上是关于1015 模拟赛的主要内容,如果未能解决你的问题,请参考以下文章

洛谷 P1015 回文数 Label:续命模拟QAQ

片段标签的使用

GLSL:无法从 FBO 读取纹理并使用片段着色器渲染到另一个 FBO

我应该使用 ScrollView 还是 RecyclerView 在片段中滚动?

片段实例中带有 Otto 事件总线的 IllegalArgumentException

导航到目的地时仅创建一个片段实例(android)