本题是一个贪心题,关键在于思考如何排序才好;
这里应该用最多多余时间来排序,即:s[i].x=s[i].v-s[i].d-t;
在这里需要明白的几点是:
每行在开打之前都需要t时间来种植植物;所以排序要按上面的进行也就很好解释了;
此题最好用结构体来写,四个两都要在其中,因为排完序之后,v和d的顺序,也要按排完后比较;
在此,再比较判断时,t每次都要增加t,如果打死需要的时间和在此前总种植的时间之和小于度过总时间,则会吃到。。
#include"stdio.h"
#include"algorithm"
using namespace std;
struct point
{
int x,y,z,w;
}a[1000];
int cmp(point a,point b)
{
return a.x<b.x;
}
int main()
{
int m,n,i,t;
while(scanf("%d%d",&n,&t)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].z,&a[i].w);
a[i].x=a[i].z-t-a[i].w;
a[i].y=i+1;
}
sort(a,a+n,cmp);
m=t;
for(i=0;i<n;i++)
{
if(a[i].z-t<a[i].w)
{
printf("The zombies eat your brains!\n");
break;
}
t+=m;
}
if(i==n)
{
for(i=0;i<n-1;i++)
printf("%d ",a[i].y);
printf("%d\n",a[i].y);
}
}
return 0;
}