1 条题解

  • 0
    @ 2025-8-21 15:26:38
    #include<bits/stdc++.h>
    using namespace std;
    #define int long long
    
    signed main() {
    	ios::sync_with_stdio(false);
    	cin.tie(0);
    	int type, n, m, p;
    	cin >> type >> n >> m >> p;
    	//n个位置放m个东西,共有n-m个空格
    	//假定m个东西位置不变,需要再填进去(m-1)个空格,剩下n-m-(m-1) = n-2m+1个空格可以自由填入
    	//包括最左和最右,共有m+1个位置可以填入剩下的空格
    	//所以最终是n-2m+1个空格放到m+1个位置,允许位置为空
    	int a = n - 2 * m + 1;
    	int b = m + 1;
    	//a个物体放到b个箱子中,相当于a+b-1个位置中挑b-1个地方当隔断
    	//所以是个组合数,从x个东西中挑选y个东西
    	int x = a + b - 1;
    	int y = b - 1;
    	//现在是x个元素挑y个 = x! / y! / (x - y)!
    	//换算成n和m是(n - m + 1)! / m! / (n - 2m + 1)
    	//但是最终还要乘上m!区分花
    	//所以最终是(n-m+1)! / (n-2m+1)!
    	int ans = 1;
    	for (int i = (n - 2 * m + 2); i <= (n - m + 1); i++){
    		ans = (ans * i) % p;
    	}
    	cout << ans;
    	return 0;
    }
    
    • 1

    信息

    ID
    87
    时间
    1000ms
    内存
    500MiB
    难度
    8
    标签
    递交数
    70
    已通过
    11
    上传者