2024年码蹄杯高职组初赛第三场 -P序列 题型:找规律 乘法原理 思维

130 阅读1分钟

码题集OJ-P序列 (matiji.net)

思想

首先我们需要找到最大值,然后我们再对其他值做乘法原理.

拿样例举例:

样例1 image.png

我们先找出最大值3,然后还有2个2.我们可以让这2个2全部放3的最右边,整体呈严格递增趋势,也可以把所有2全部放在3的右边,整体呈严格递减趋势.也可以把1个2放3左边,另一个2放3右边,整体呈先严格递增,后严格递减趋势,一共就有3种排列:

image.png

样例2

image.png

首先我们找到最大值5,还剩3个2,2个1.我们先看2个1有多少种排列:

image.png

再看3个2有多少种排列:

image.png

一共就有3*4种排列.

我们可以发现规律:

每个数能有多少种合法排列=除最大值外元素1出现次数+1 * 除最大值外元素2出现次数+1+.......

code

#define int long long
using namespace std;
const int INF=0x3f3f3f3f;
const int N=1e5+10;
const int mod=998244353;
int cnt[N];
int maxn=-INF;
int ans=1;
signed main()
{
	int n;cin>>n; 
	for(int i=1;i<=n;i++)
	{
		int x;cin>>x;
		cnt[x]++;
		maxn=max(maxn,x);
	}
	
	for(int i=1;i<maxn;i++)
	{
		if(cnt[i])
		{
			ans=ans*(cnt[i]+1)%mod;
		}
	}
	cout<<ans;
	return 0;
}

image.png