鏈結
有n滴水,給出座標,水每乙個時間單位會往下掉一格,花盆可以隨意擺放,要求在寬度最小的情況下接住的第一滴水和最後一滴水時間差超過d
橫座標排序,列舉左邊,然後維護移動視窗,之後遞增右邊直到時間差大於d,然後記錄取最小值。
#include
#include
using namespace std;
struct nodea[100001];
int h1,t1,h2,t2,q[100001],q2[100001];
int n,d,ans,r;
bool cmp(node x,node y)//排序
int main()
sort(a,a+1+n,cmp);
h1=1;t1=0;ans=2147483647;
h2=1;t2=0;r=0;
for (int l=1;l<=n;l++)
if (a[q[h1]].t-a[q2[h2]].t>=d)
ans=min(ans,a[r].x-a[l].x);//更新最小值
}if (ans==2147483647) printf("-1");
else
printf("%d",ans);
}