题目大意及模拟退火题解:见 http://blog.csdn.net/popoqqq/article/details/39340759

这次用半平面交写了一遍……求出半平面交之后。枚举原图和半平面交的每一个点,求出答案就可以

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. #include<algorithm>
  6. #define M 310
  7. #define eps 1e-7
  8. using namespace std;
  9. struct point{
  10. double x,y;
  11. }points[M];
  12. struct line{
  13. point *p1,*p2;
  14. double k,b;
  15. void Get_Parameters()
  16. {
  17. k=(double)(p1->y-p2->y)/(p1->x-p2->x);
  18. b=p1->y-k*p1->x;
  19. }
  20. bool operator < (const line &x) const
  21. {
  22. if( fabs(k-x.k)<eps )
  23. return b < x.b;
  24. return k < x.k;
  25. }
  26. }lines[M];
  27. int n;
  28. double ans=1e11;
  29. line *stack[M];int top;
  30. inline point Get_Intersection(const line &l1,const line &l2)
  31. {
  32. point re;
  33. re.x=-(l1.b-l2.b)/(l1.k-l2.k);
  34. re.y=l1.k*re.x+l1.b;
  35. return re;
  36. }
  37. void Insert(line &l)
  38. {
  39. while(top>=2)
  40. {
  41. if( Get_Intersection(*stack[top],l).x < Get_Intersection(*stack[top-1],*stack[top]).x )
  42. --top;
  43. else
  44. break;
  45. }
  46. stack[++top]=&l;
  47. }
  48. double F(double x)
  49. {
  50. int i;
  51. double re=0;
  52. for(i=1;i<=top;i++)
  53. re=max(re,stack[i]->k*x+stack[i]->b);
  54. return re;
  55. }
  56. double G(double x)
  57. {
  58. int i;
  59. for(i=n;i;i--)
  60. if(x>=points[i].x)
  61. break;
  62. return points[i].y+(x-points[i].x)/(points[i+1].x-points[i].x)*(points[i+1].y-points[i].y);
  63. }
  64. int main()
  65. {
  66. int i;
  67. cin>>n;
  68. for(i=1;i<=n;i++)
  69. scanf("%lf",&points[i].x);
  70. for(i=1;i<=n;i++)
  71. scanf("%lf",&points[i].y);
  72. for(i=1;i<n;i++)
  73. lines[i].p1=points+i,lines[i].p2=points+i+1,lines[i].Get_Parameters();
  74. sort(lines+1,lines+n);
  75. for(i=1;i<n;i++)
  76. if(i==n-1||fabs(lines[i].k-lines[i+1].k)>eps)
  77. Insert(lines[i]);
  78. for(i=1;i<=n;i++)
  79. ans=min(ans,F(points[i].x)-points[i].y);
  80. for(i=1;i<top;i++)
  81. {
  82. point p=Get_Intersection(*stack[i],*stack[i+1]);
  83. ans=min(ans,p.y-G(p.x));
  84. }
  85. printf("%.3lf\n",ans);
  86. }

BZOJ 1038 ZJOI2008 瞭望塔 半平面交的更多相关文章

  1. [BZOJ1038][ZJOI2008]瞭望塔(半平面交)

    1038: [ZJOI2008]瞭望塔 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2999  Solved: 1227[Submit][Statu ...

  2. bzoj 1038 [ZJOI2008]瞭望塔(半平面交)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1038 [题意] 找一个最低塔高使可以看到村庄的每一个角落. [思路] 半平面交 能够看 ...

  3. 【BZOJ 1038】 1038: [ZJOI2008]瞭望塔

    1038: [ZJOI2008]瞭望塔 Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 ...

  4. bzoj 1038 瞭望塔 半平面交+分段函数

    题目大意 给你一座山,山的形状在二维平面上为折线 给出\((x_1,y_1),(x_2,y_2)...(x_n,y_n)\)表示山的边界点或转折点 现在要在\([x_1,x_n]\)(闭区间)中选择一 ...

  5. 「BZOJ1038」「洛谷P2600」「ZJOI2008」瞭望塔 半平面交+贪心

    题目链接 BZOJ/洛谷 题目描述 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安. 我们将H村抽象为一维的轮廓.如下图所示: 我们可以用一条山的上方 ...

  6. 【BZOJ】1038: [ZJOI2008]瞭望塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1038 题意:给出n个x轴各不相同的二维整点,且升序,n<=300,坐标绝对值<=10^6 ...

  7. 1038: [ZJOI2008]瞭望塔 - BZOJ

    Description 致力于建设全国示范和谐小村庄的H村村长dadzhi,决定在村中建立一个瞭望塔,以此加强村中的治安.我们将H村抽象为一维的轮廓.如下图所示 我们可以用一条山的上方轮廓折线(x1, ...

  8. 1038: [ZJOI2008]瞭望塔

    半平面交. 半平面指的就是一条直线的左面(也不知道对不对) 半平面交就是指很多半平面的公共部分. 这道题的解一定在各条直线的半平面交中. 而且瞭望塔只可能在各个点或者半平面交折线的拐点处. 求出半平面 ...

  9. bzoj千题计划126:bzoj1038: [ZJOI2008]瞭望塔

    http://www.lydsy.com/JudgeOnline/problem.php?id=1038 本题可以使用三分法 将点按横坐标排好序后 对于任意相邻两个点连成的线段,瞭望塔的高度 是单峰函 ...

随机推荐

  1. 百度地图js版定位控件

    一 概述 百度地图在最新版已加入浏览器定位控件,个人认为应该是既高德地图更新了一个浏览器也能定位功能后,百度不甘落后自己简简单单,草草写了个这个功能的定位控件 GeolocationControl 这 ...

  2. IIS部署asp.net报404错误

    1).所建网站->(右键)权限->"ASP.NET计算机帐户"是否已添加.     2).所建网站->(右键)属性->ASP.NET选项卡->版本是否 ...

  3. 【Android UI设计与开发】第17期:滑动菜单栏(二)开源项目SlidingMenu的示例

    通过上一篇文章的讲解,相信大家对于开源项目SlidingMenu都有了一个比较初步的了解(不了解的可以参考上 一篇文章),那么从这一章开始,博主将会以SlidingMenu为重心,给大家带来非常丰富的 ...

  4. xcode5下一个ffmpeg静态库配置

    1.若要安装xcode命令行工具 1).xcode5安装命令行工具方法: 在终端运行命令Using xcode-select --install 2).xcode5之前安装命令行工具方法: 2.xco ...

  5. 《sql---教学反馈系统-阶段项目1》

    --修改列 --把 "Address" 栏位改名为 "Addr".这可以用以下的指令达成: --ALTER table customer change Addr ...

  6. Tiny并行计算框架之复杂演示样例

    问题来源  很感谢@doctorwho的问题: 假如职业介绍所来了一批生产汽车的工作,如果生产一辆汽车任务是这种:搭好底盘.拧4个轮胎.安装发动机.安装4个座椅.再装4个车门.最后安装顶棚. 之间有的 ...

  7. POJ1505&amp;&amp;UVa714 Copying Books(DP)

    Copying Books Time Limit: 3000MS Memory Limit: 10000K Total Submissions: 7109 Accepted: 2221 Descrip ...

  8. 百度地图API相关点

    百度API接口:http://developer.baidu.com/map/jsdemo.htm#a1_1 百度地图API具体解释之地图标注:http://www.cnblogs.com/jz110 ...

  9. hdu1690 Bus System (dijkstra)

    Problem Description Because of the huge population of China, public transportation is very important ...

  10. www.centos.org

    https://www.centos.org/forums/viewtopic.php?t=5770 In order to conserve the limited bandwidth availa ...