训练营同学来自n(1≤n≤105)个城市,每个城市的同学人数分别为a1,a2,…,an(1≤an≤109)。小Z将派出n辆车迎接同学。同一个城市的同学需要坐同一辆车,一辆车只能载来自同一个城市的同学,一辆车只能跑一次,且不能超过每辆车的载客量b1,b2, …, bn(1≤bn≤109)。请问有多少种不同的方式把这n个城市的同学安排到这n辆车?
输入的第一行包含n。第二行包含n个空格分隔的整数a1,a2,…,an。第三行包含n个空格分隔的整数b1,b2, …, bn。
输出满足条件的方案数,结果对100000007取模。
#include <bits/stdc++.h>
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("D:/VS CODE/C++/in.txt", "r", stdin);
freopen("D:/VS CODE/C++/out.txt", "w", stdout);
#endif
int n;
cin >> n;
vector<long> people;
vector<long> car;
const int m = 100000007;
for (int i = 0; i < n; i++) {
long a;
cin >> a;
people.push_back(a);
}
for (int i = 0; i < n; i++) {
long a;
cin >> a;
car.push_back(a);
}
sort(people.begin(), people.end(), greater<long>());
sort(car.begin(), car.end(), greater<long>());
long ans = 1;
for (int i = 0; i < n; i++) {
int j = i;
while (j < n && car[j] >= people[i]) {
j++;
}
ans *= j - i;
ans %= m;
if (ans == 0) {
break;
}
}
cout << ans;
fclose(stdin);
fclose(stdout);
return 0;
}



京公网安备 11010502036488号