专栏文章

题解:CF288B Polo the Penguin and Houses

CF288B题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio3ww5o
此快照首次捕获于
2025/12/02 12:57
3 个月前
此快照最后确认于
2025/12/02 12:57
3 个月前
查看原文

提醒:建议大家看原题意

不然就会像我一样不知道一个点只能连往外连 1 条边,也不知道允许自环。

思路:

分类讨论,11kk 为第一类,k+1k+1nn 为第二类。
  • 第一类,对于每个属于 11kk 的节点:
    满足 11kk 的节点在一个环里。所以只要保证 ii 可以去到在 11kk 中除了 ii 的另一个点就可以了。有 k1k-1 种选择。
所以此方案总和为 kk1k ^ {k-1}
  • 第二类,对于每个属于 k+1k+1nn 的节点:
    保证不去到由 11kk 构成的环就可以了。有 nkn-k 种选择。
所以此方案总和为 (nk)nk(n-k) ^ {n-k}
所以答案为 kk1×(nk)nkk^{k-1}\times(n-k)^{n-k}

代码:

CPP
#include<bits/stdc++.h>
#define md 1000000007
#define int long long
using namespace std;
int n,k;
int qpow(int a,int b){
	int ans=1;
	a%=md;
	while(b){
		if(b&1) ans*=a,ans%=md;
		a*=a;
		a%=md;
		b/=2;
	}
	return ans;
}
main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>k;
	cout<<(qpow(n-k,n-k)*qpow(k,k-1))%md;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...