Cow Jog bzoj-3893 Usaco-2014 Dec
题目大意:题目链接。
注释:略。
想法:
先按照坐标排序。
我们发现每个牛只会被后面的牛影响。
所以我们考虑逆向枚举。
记录一下i+1~n的牛最近能到哪,然后判断一下当前的第i头牛能不能比那个值大就行了。
如果比那个值大,就说明当前牛能跟后面的牛合并。
如果当前的值比后面的值小,说明当前的牛是一群牛的开头。
最后,附上丑陋的代码.....
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100005
using namespace std;
long long n,t,last[N];
struct cow
{
long long spd,dic;
}a[N];
int main()
{
cin >> n >> t ;
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&a[i].dic,&a[i].spd);
last[i]=a[i].dic+a[i].spd*t;
}
int ans=1;
for(int i=n-1;i>=1;i--)
{
if(last[i]>=last[i+1]) last[i]=last[i+1];
else ans++;
}
printf("%d\n",ans);
return 0;
}
小结:最近从后向前的题好多的啊...