题意:

有宽度相同的水平的n个旗门,水平(纵坐标严格递增)滑行的最大速度为Vh(水平速度可以任意调节)。然后还有S双滑雪板,每双滑雪板的垂直速度一定。

然后求能通过的滑板鞋的最大速度。

分析:

显然,滑雪板的速度越小越容易通过所有的旗门。然后二分找出这个能通过旗门的最大值,最后在滑雪板里面找出这个范围的最大值。

如何判断某个速度可以通过所有的旗门:

第一个旗门处起点可以是任意的,到达第二个旗门的垂直高度时有一个范围,然后和第二个旗门的宽度的范围求交集。如果为∅,则不能通过。否则,继续求到达下一个高度的范围,再和第三个旗门的范围求交集。

在敲代码的过程中,judge函数WA掉了,后来看的别人的写法过的。浮点运算尽是坑啊,Orz

 //#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int maxn1 = + ;
const int maxn2 = + ;
int w, vx, n;
int x[maxn1], y[maxn1], s[maxn2]; bool judge(int vy)
{
int i,j;
double x1,x2;
x1=x[];
x2=x[] + w;
for(i = ; i < n; i++)
{
double d = vx*1.0*(y[i] - y[i-]) / vy;
x1 -= d,x2 += d;
x1 = max(x1, x[i]*1.0);
x2 = min(x2, (x[i] + w)*1.0);
if(x1 - x2>1e-)
{
return false;
}
}
return true;
} int main(void)
{
#ifdef LOCAL
freopen("11627in.txt", "r", stdin);
#endif int T, m, i;
scanf("%d", &T);
while(T--)
{
scanf("%d%d%d", &w, &vx, &n);
for(int i = ; i < n; ++i)
scanf("%d%d", &x[i], &y[i]); int L = , R = maxn2;
while(L < R)
{
int mid = L + (R - L + ) / ;
if(judge(mid)) L = mid;
else R = mid - ;
} int ans = ;
scanf("%d", &m);
for(i = ; i < m; ++i)
{
int x;
scanf("%d", &x);
if(x <= L)
ans = max(ans, x);
}
if(ans)
printf("%d\n", ans);
else
puts("IMPOSSIBLE");
}
return ;
}

代码君

最新文章

  1. .NET跨平台之旅:增加文件日志功能遇到的挫折
  2. 通过SSH连接linux服务器
  3. [issue] [iOS 10] 升级后无法真机测试 Could not find Developer Disk Image
  4. 解决oracle服务器重启之后连接报错的问题
  5. json格式
  6. C#中扩展StringBuilder支持链式方法
  7. .net core 使用Autofac依赖注入
  8. Android 利用Service BroadcastReceiver实现小例子
  9. HDU1247 - Hat&rsquo;s Words(Trie树)
  10. jquery ajax验证用户名是否存在(后台spring mvc)
  11. 【夯实shell基础】shell基础面面观
  12. Linux 各种软件的安装 - svn
  13. 2018.4.23 git常用操作命令收集(转)
  14. Android-多进程初识
  15. WCF 的 WebGet 方式
  16. Java JNI初探
  17. 2014年百度之星程序设计大赛 - 资格赛 1001 Energy Conversion
  18. 在phpWeChat中生成公众号 jssdk 各个参数(PHP)
  19. 论文笔记:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
  20. Hibernate的懒加载session丢失解决方法

热门文章

  1. JS数据类型的理解(猜测)
  2. Sqli-labs less 41
  3. Sublime Text 编辑器
  4. 运行时修改TimerTask的执行周期
  5. java与.net之间xml传递,xml最前面多了个?
  6. Android中两种设置全屏的方法
  7. ios下划线变量:为什么变量前要加下划线才有用?
  8. hdu 4155 The Game of 31 博弈论
  9. dom对象详解--document对象(三)
  10. 关于模态/非模态对话框不响应菜单的UPDATE_COMMAND_UI消息(对对WM_INITMENUPOPUP消息的处理)