Description
二哥在网上买干草。他发现了一笔特殊的买卖。他每买一捆大小为A(1 <= A <= 1,000,000)的干草,他就能免费获得一捆大小为B(1 <= B < A)的干草,也就是说免费的那个必须大小是小于购买的那个。
然而,这笔交易是有规定的:大的一捆干草必须是高质量的,小的一捆是低质量的。二哥是个吝啬鬼,他并不在意:随便什么质量,只要能省钱就好。
给出一组N(1 <= N <= 10,000)捆高质量干草的大小,M(1 <= M <= 10,000)捆低质量的干草的大小,找出二哥最多能买多少捆干草。他能买高质量的干草,但他不能买低质量的干草(就是说,他只能通过赠送来获得低质量的草)。
Input Format
第一行给出N,M
下面N+M行,先给出高质量的N捆高质量干草的大小,再给出M捆低质量的
Output Format
二哥最多可以得到多少捆干草
Hint
对于面样例,二哥可以这样进行操作,买6得3,买3得1,买1时,不能拿到低质量的干草,最终得到5捆.
Sample Input
3 4
3 4
6
1
3
1
5
3
4
Sample Output
5
代码
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
int main()
{
priority_queue<int, vector <int>, greater<int>> s1, s2;
int N, M;
cin>>N>>M;
for(int i=0; i<N;++i)
{
int tmp1;
cin>>tmp1;
s1.push(tmp1);
}
for(int i=0; i<M;i++)
{
int tmp2;
cin>>tmp2;
s2.push(tmp2);
}
int time=0;
while(!s1.empty())
{
int n=s1.top();
int m=s2.top();
if(n>m)
{
time++;
s1.pop();
s2.pop();
}
else{
s1.pop();
}
}
cout<<time+N<<endl;
return 0;
}
网友评论