为什么这个思路是错的(带示意图,已过样例,求 hack)?
查看原帖
为什么这个思路是错的(带示意图,已过样例,求 hack)?
813622
Igallta楼主2025/1/17 20:52

0pts /ll

首先,如果 n<m-1 直接输出 0。

然后,先不管 n 是多少,让它合法。(例如:m=4 n=8)

如图所示,先把三个框拿过去让它合法。因为它内部也可以排序,所以现在的方案数是 m!m!8!8!)。

再插最后一个框

因为这里有 88 种情况,所以再乘 88,对于这个样例的结果就是 8!×88!\times 8

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,p,sum=1,ans;
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n>>n>>m>>p;
	if(n<m-1){
		cout<<0;
		return 0;
	}
	for(int i=2;i<=m;i++){
		sum*=i;
		sum%=p;
	}
	ans=sum;
	if(n>=2*m+1){
		sum=1;
		for(int i=2*m+1;i<=n;i++){
			sum*=i;
			sum%=p;
		}	
		ans*=sum;
		ans%=p;
	}
	cout<<ans;
	return 0;
}
2025/1/17 20:52
加载中...