Description
农夫家里有n把斧头,每一把斧头都有一个极限值,表示可以砍半径不大于该极限值的树。并且每个斧头都只能使用一次。农夫需要建一间房子,他需要一些木头。农夫家不远处有一个森林,森林里有m棵树。他想用家里的斧头去砍树,希望用n把斧头砍到最多的树。你能编一个程序,计算出农夫最多能砍到多少树吗?
Input
第一行输入n,m。0=<n,m=<10000。表示农夫有n把斧头,森林里有m棵树。
第二行有n个正整数,a1,a2,……an。表示每把斧头的极限值。
第三行有m个正整数,b1,b2,……bm。表示森林里每棵树的半径。
Output
输出农夫最多能砍到多少棵树。
Sample Input
2 31 21 2 3
Sample Output
2
思路:将 a,b数组进行排序,比较并记录。
#include <iostream>
#include<algorithm>
using namespace std;
int tree[10001];
int sum=0;
void Try(int a[],int b[],int n,int m)
{
sort(a,a+n);
sort(b,b+m);
for(int i=0;i<n;i++)
{
for(int v=0;v<m;v++)
{
if(a[i]>=b[v])
{
if(tree[v]==0)
{
tree[v]=1;
sum++;
break;
}
}else
{
break;
}
}
}
}
int main()
{
int a[10001],b[10001];
int n,m;
cin>>n>>m;
for(int i=0;i<m;i++) tree[i]=0;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<m;i++) cin>>b[i];
Try(a,b,n,m);
cout<<sum<<endl;
return 0;
}