测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25816. 组合

填空题 较难

题目描述

组合

题目描述

某校庆祝元旦,要求某班级选出n位男生和n位女生参加节目。由于节目需要,男女同学需要按照以下要求两两组合参加。

要求:

1.每组组合需为一位男生和一位女生;

2.一般情况,要求每组组合中男生身高大于等于女生身高;

3.特殊情况,可以出现女生身高大于男生身高的组合,但需要限定最多组合数。

在给出男生和女生数量n,和限定最多组合数k(1<n<10,0≤k<n),及所有男女生学身高后,按照组合要求共有多少种组合方案。

如:n为3(表示有3位男生和3位女生参加节目),k为0(表示组合中女生身高大于男生身高的组合情况最多出现0组),3位男生身高分别为165、175、163,3位女生身高分别为155、165、157。共有4种组合方案:

输入描述

第一行输入两个整数n和k(1<n<10,0≤k<n),n表示有n位男生和n位女生参加节目,k表示可以出现女生身高大于男生身高的最多组合数。

第二行输入n个正整数(130<正整数<200),表示n位男同学的身高,正整数之间一个空格隔开。

第三行输入n个正整数(130<正整数<200),表示n位女同学的身高,正整数之间一个空格隔开。

输出描述

输出一个整数,如果有满足要求的组合方案输出组合方案数,如果没有满足要求的组合方案输出0。

样例输入

3 0
165 175 163
155 165 157

样例输出

4

参考答案

#include <algorithm> #include <cstdio> #include <cstring> #include <iostream> using namespace std; int n, k; int by[15]; int gl[15]; int a[15]; int ans = 0; int jie(int i) { if (i == 0 || i == 1) { return 1; } else { return i * jie(i - 1); } } void check() { int tmp = 0; for (int i = 1; i <= n; ++i) { if (by[i] < gl[a[i]]) { tmp++; } if (tmp > k) { return; } } if (tmp <= k) { ans++; } return; } int main() { cin >> n >> k; for (int i = 1; i <= n; ++i) { cin >> by[i]; } for (int i = 1; i <= n; ++i) { cin >> gl[i]; } for (int i = 1; i <= n; ++i) { a[i] = i; } int tt = jie(n); for (int i = 1; i < tt; ++i) { check(); next_permutation(a + 1, a + n + 1); } check(); cout << ans; return 0; }
上一题 下一题