思路
提成跟就餐人数直接相关,人数越多你的提成越高,因此优先考虑人数多的家庭。从大到小排序之后模拟目前容量最高的座位能分配给哪个家庭,累加答案即可
代码实现
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int>queueToEat,vector<int>dining) {
sort(queueToEat.rbegin(),queueToEat.rend());
sort(dining.rbegin(),dining.rend());
int ans=0;
int n=queueToEat.size();
int m=dining.size();
int j=0;
for(int i=0;i<m&&j<n;i++){
while(queueToEat[j]>dining[i]&&j<n){
j++;
}
if(j>=n)break;
ans++;
j++;
}
return ans;
}
vector<int> split(string s) {
s += " ";
vector<int> res;
int v = 0, f = 0;
for (char c : s) {
if (isdigit(c)) {
f = 1;
v = v * 10 + c - '0';
} else {
if (f) res.push_back(v);
v = f = 0;
}
}
return res;
}
int main() {
string s1, s2;
getline(cin, s1, ']');
getline(cin, s2);
vector<int>a = split(s1);
vector<int>b = split(s2);
cout << solve(a, b) << '\n';
}