#3982. [GESP2409 八级] ⼿套配对
[GESP2409 八级] ⼿套配对
⼿套配对
题目描述
⼩杨有 对不同的⼿套,每对⼿套由左右各⼀只组成。 ⼩杨想知道从中取出 只⼿套, 只⼿套恰好包含 对⼿套的情况有多少种。 ⼩杨认为两种取出的情况不同,当且仅当两种情况取出的⼿套中存在不同的⼿套(同⼀对⼿套的左右⼿也视为不同 的⼿套)。
输入格式
第⼀⾏包含⼀个正整数 ,代表测试⽤例组数。 接下来是 组测试⽤例。对于每组测试⽤例,⼀共⼀⾏。 第⼀⾏包含三个正整数 ,代表⼿套数量,取出的⼿套数和⽬标对数。
输出格式
对于每组测试数据,输出⼀个整数,代表可能的情况数量对 取模的结果。 3.1.4 样例1 1 2 2 5 6 2 3 5 1 5 1 120 2 0 子任务编号 数据点占比 1 30% 2 30% 3 40% 对于全部数据,保证有 , , 。 3.1.5 参考程序 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N = 2e3+10; 4 const int p = 1e9+7; 5 #define ll long long 6 ll c[N][N]; 7 ll pw[N]; 8 int n,m,k; 9 void init(){ 10 pw[0]=1; 11 for(int i=0;i<N;i++){ 12 if(i)pw[i]=pw[i-1]2%p; 13 for(int j=0;j<=i;j++){ 14 if(j==0)c[i][j]=1; 15 else c[i][j]=(c[i-1][j]+c[i-1][j-1])%p; 16 } 17 } 18 } 19 int main(){ 20 init(); 21 int t; 22 cin>>t; 23 while(t--){ 24 cin>>n>>m>>k; 25 if(m<2k||m-2k>n-k){ 26 cout<<"0\n"; 27 continue; 28 } 29 ll ans=c[n][k]c[n-k][m-2k]%p; 30 ans=anspw[m-2*k]%p; 31 cout<<ans<<"\n"; 32 } 33 }
样例输入 #1
1 2
2 5 6 2
3 5 1 5
1 120
2 0
子任务编号 数据点占比
1 30%
2 30%
3 40%
样例输出 #1
数据范围
见题目描述
知识点与难度
本题涉及的知识点从属于 GESP 8级,难度等级:⭐⭐⭐⭐⭐⭐⭐ 。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 / 特殊性质 |
| 2 | 15 | 9~11 | Hack |
| 3 | 30 | 12~20 | 中大规模 |
| 4 | 25 | 21~25 | 随机回归 |
生测试数据后,按实际 subtask 分组改写上表。