AtCoder Regular Contest 145

AtCoder Regular Contest 145#

A#

过于简单,略


B#

虽然简单但是细节特别多,略


C#

题意

给你一个数 n,我们定义一个长度为 2n 的排列 P 的得分如下

将这个排列分成两个长度均为 n 的(不一定要连续的)子序列 A1n 以及 B1n,那么所有 A,B 的划分中 max{i=1nAiBi} 就是该排列的得分

M 表示所有排列的最大得分,求有多少种排列的得分为 M

答案对 998244353 取模

1n2×105

思路

显然对于四个数 A,B,C,D 满足 A<B<C<D 的情况,必然有 AB+CD 是两两乘积求和中最大的

那么这个长度为 2n 的序列中的数就可以一一对应起来:2n2n1,2n22n3,,21

我们首先确定每一对数 (a,b) 把谁放在 A 序列中,也就是当作左边的元素

这样就一共有 2n 种左边元素的方案

然后左边元素又可以任意排列,所以一共就有 n! 中排列方式

然后我们再来考虑把它们放在排列 P

显然如果我们从左到右遍历一遍 P,那么左边元素的数量一定大于右边元素的数量

这不就是括号序列吗,括号序列的总方案数共有 1n+1(2nn) 种 (卡特兰数)

(我貌似还没有学会卡特兰数)

那么把它们乘起来,最后总方案数就是

2nn!1n+1(2nn)=2n2n!(n+1)!

code

#include<bits/stdc++.h>
using namespace std;

#define int long long
const int mod=998244353;

int n;

inline int qpow(int x,int idx){
	if(!idx) return 1;
	int t=qpow(x,idx>>1);
	return (idx&1)?t*t%mod*x%mod:t*t%mod;
}

signed main(){
	cin>>n;
	int ans=qpow(2,n);
	for(int i=n+2;i<=2*n;++i) ans=(ans*i)%mod;
	cout<<ans<<endl;
}

D#

题意

给定 n,m

要求构造出一个满足以下条件的集合 S

  • S 中有恰好 n 个数

  • S 中的所有数都在 [107,107] 之内

  • 对于所有  x,y,z(x<y<z) 都有 yxzy

  • sS=m

1n104,|m|n×106

思路

我们先只关注限制 3

yxzy2yx+z

那么有一种较好的构造方式是让集合 S 中的所有数三进制下均为 0/1

这样 x<z 的话 (x+z)(3) 必然至少有一位为 1

并且 2y(3) 必然全是 0/2,这样就使得 2yx+z

然后我们再来考虑让所有数和为 m

我们先建立一个如上的集合 S,设集合 sS=sum

现在我们就是要把 sum 变成 m,由于给集合 S 中所有数加上同一个数仍会满足限制 3

而集合中总共有 n 个数,我们每次全部数都减去一个 x 就相当于总共减去 nx

所以我们需要做的就是把 summ 变成 n 的倍数

也就是要把 sum 减去 ((summ)modn+n)modn

考虑我们可以把集合中的每一个数 ×3,这样我们就可以通过给 ((summ)modn+n)modn 个数减去 1 来使得 sum 减去 ((summ)modn+n)modn,同时还能满足限制 3

code


		for(int j=0;j<15;++j,tmp*=3){
			if((i>>j)&1)
				x+=tmp;
		}
		sum+=x;
		s[++cnt]=x;
	}
	int x=((m-sum)%n+n)%n;
	for(int i=1;i<=x;++i) ++s[i],++sum;
	//if(m<sum) for(int i=1;i<=n;++i)
	int delta=(sum-m)/n;
	for(int i=1;i<=cnt;++i)
		printf("%d ",s[i]-delta);
}

作者:Into_qwq

出处:https://www.cnblogs.com/into-qwq/p/16537063.html

版权:本作品采用「qwq」许可协议进行许可。

posted @   Into_qwq  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示