题目链接:点击打开链接
大意:世界末日在 t 秒后要来了,n 个人,m 个避难所,一个避难所最多容纳 k 个人,每个人一秒只能走 1 米,给出所有人,所有避难所的位置(都位于同一直线上),问最后最多几个人可以活下来。
思路:就是贪心,一直挂在 test11 上,后来改了才过。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,m,k,t;
int a[200010],b[200010];
int main()
{
while(~scanf("%d%d%d%d",&n,&m,&k,&t))
{
for(int i=0;i<n;i++)
scanf("%d",a+i);
for(int i=0;i<m;i++)
scanf("%d",b+i);
sort(a,a+n);
sort(b,b+m);
int ans=0,j=0;
for(int i=0;i<m;i++)
{
int v=k;
while(j<n&&a[j]-t<=b[i]&&v) // 这里注意一下,只要人往左走最大能走到避难所的左边,且此时避难所有空位置,那么不管这个人能不能进去,都去换下一个人上
{
if(a[j]+t>=b[i])
{
ans++;
v--;
}
j++;
}
if(j==n) break;
}
printf("%d\n",ans);
}
return 0;
}