这题的题意真是醉了,而且UVA评测机好像对这题评测不了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000000+100;
const double eps=1e-8;
int x[maxn],y[maxn],s[maxn];
int w,v,n,S;
bool ok(int mid)
{
double l=x[0]+0.0,r=x[0]+w+0.0;
for(int i=1;i<n;i++)
{
double t=(double)(y[i]-y[i-1])/mid;
l=l-t*v;
r=r+t*v;
l=max(l,(double)x[i]);
r=min(r,(double)x[i]+w);
if(l-r>eps) return false;
}
return true;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d%d%d",&w,&v,&n);
for(int i=0;i<n;i++) scanf("%d%d",&x[i],&y[i]);
scanf("%d",&S);
for(int i=1;i<=S;i++) scanf("%d",&s[i]);
sort(s+1,s+S+1);
int l=1,r=S,mid;
while(l<r)
{
mid=(l+r+1)/2;
if(ok(s[mid])) l=mid;
else r=mid-1;
}
if(ok(s[l])) cout<<s[l]<<endl;
else cout<<"IMPOSSIBLE"<<endl;
}
return 0;
}