题意:一个空平面,每次增加一个点,
其坐标根据上一个点算出:(x[i-1] * Ax + Bx ) mod Cx,(y[i-1] * Ay + By ) mod Cy

求出现有点集中的最近点对的距离的平方,共增加n个点,求每次求得的平方的和

http://blog.csdn.net/liuledidai/article/details/9664031

  1. /*
  2. set+最近点对
  3. 每次对于一个新插入的点,找出x与之最近的,然后分别向两侧搜
  4. 题意:一个空平面,每次增加一个点,
  5. 其坐标根据上一个点算出:(x[i-1] * Ax + Bx ) mod Cx,(y[i-1] * Ay + By ) mod Cy
  6. 求出现有点集中的最近点对的距离的平方,共增加n个点,求每次求得的平方的和
  7. */
  8. #include<stdio.h>
  9. #include<string.h>
  10. #include<stdlib.h>
  11. #include<algorithm>
  12. #include<iostream>
  13. #include<queue>
  14. #include<map>
  15. #include<set>
  16. #include<math.h>
  17. using namespace std;
  18. typedef long long int64;
  19. //typedef __int64 int64;
  20. const int maxn = 5e5+;
  21. const int64 inf = ;
  22. const double pi=acos(-1.0);
  23. const double eps = 1e-;
  24. struct Node{
  25. int64 x,y;
  26. };
  27. Node cur,nxt;
  28. typedef pair<int64,int64> PII;
  29. #define MP(a,b) make_pair((a),(b))
  30. set< pair<int64,int64> > s;
  31. int main(){
  32. int T;
  33. scanf("%d",&T);
  34. while( T-- ){
  35. int64 Ax,Bx,Cx,Ay,By,Cy;
  36. int n;
  37. scanf("%d%I64d%I64d%I64d%I64d%I64d%I64d",&n,&Ax,&Bx,&Cx,&Ay,&By,&Cy);
  38. //scanf("%d%lld%lld%lld%lld%lld%lld",&n,&Ax,&Bx,&Cx,&Ay,&By,&Cy);
  39. s.clear();
  40. cur.x = cur.y = ;
  41. nxt.x = (Ax*cur.x+Bx)%Cx;
  42. nxt.y = (Ay*cur.y+By)%Cy;
  43. cur = nxt;
  44. s.insert( MP(cur.x,cur.y) );
  45. n--;
  46. int64 res,Min;
  47. res = ;
  48. Min = inf;
  49. while( n-- ){
  50. if( Min== ) break;
  51. nxt.x = (Ax*cur.x+Bx)%Cx;
  52. nxt.y = (Ay*cur.y+By)%Cy;
  53. cur = nxt;
  54. if( s.count(MP(cur.x,cur.y)) ) {
  55. res += ;
  56. break;
  57. }
  58. s.insert( MP(cur.x,cur.y) );
  59. set<PII>::iterator it,tmp;
  60. it = s.lower_bound( MP(cur.x,cur.y) );
  61. for( tmp=it,tmp++;tmp!=s.end();tmp++ ){
  62. int64 tx = (*tmp).first;
  63. int64 ty = (*tmp).second;
  64. if( (tx-cur.x)*(tx-cur.x)>=Min ) break;
  65. else{
  66. int64 Dis = (tx-cur.x)*(tx-cur.x)+(ty-cur.y)*(ty-cur.y);
  67. Min = min( Min,Dis );
  68. }
  69. }
  70. for( tmp=it,tmp--;it!=s.begin();tmp-- ){
  71. int64 tx = (*tmp).first;
  72. int64 ty = (*tmp).second;
  73. if( (tx-cur.x)*(tx-cur.x)>=Min ) break;
  74. else{
  75. int64 Dis = (tx-cur.x)*(tx-cur.x)+(ty-cur.y)*(ty-cur.y);
  76. Min = min( Min,Dis );
  77. }
  78. if( tmp==s.begin() ) break;
  79. }
  80. res += Min;
  81. }
  82. //printf("%lld\n",res);
  83. printf("%I64d\n",res);
  84. }
  85. return ;
  86. }

HDU4631+Set+最近点对的更多相关文章

  1. HDU-4631 Sad Love Story 平面最近点对

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 数据是随机的,没有极端数据,所以可以分段考虑,最小值是一个单调不增的函数,然后每次分治算平面最近 ...

  2. [hdu4631 Sad Love Story]最近点对,枚举

    题意:S是平面内点的集合,初始为空,每次向集合里面加入一个点P(x,y),询问S内最近点对的距离的平方和 思路:设当前集合的答案为D,则找到集合里面横坐标在(x-√D,x+√D)内的数,用它们来更新答 ...

  3. ICP算法(Iterative Closest Point迭代最近点算法)

    标签: 图像匹配ICP算法机器视觉 2015-12-01 21:09 2217人阅读 评论(0) 收藏 举报 分类: Computer Vision(27) 版权声明:本文为博主原创文章,未经博主允许 ...

  4. Quoit Design---hdu1007(最近点对问题 分治法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:给你n(2<=n<=10^6)个点的坐标,然后找到两个点使得他们之间的距离最小 ...

  5. 求空间内两条直线的最近距离以及最近点的坐标(C++)

    关键词:空间几何 用途:总有地方会用到吧 文章类型:C++函数展示 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-19 @Lab: CvLab20 ...

  6. HDU 1007Quoit Design(最近点问题)

    最近点问题:二维平面中有n(n很大)个点,求出距离最近的两个点 思路:因为n的值很大,所以暴力和dp都行不通了吧!分治法就挺好的. 将区间一半一半的分开,直到分成只有一个点或两个点的时候! 对于只有两 ...

  7. 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索

    第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...

  8. 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点

    平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...

  9. 2.11 2D平面最近点对问题[closest pair problem]

    [本文链接] http://www.cnblogs.com/hellogiser/p/closest-pair-problem.html [题目] 给定平面上N个点的坐标,找出距离最近的两个点之间的距 ...

随机推荐

  1. 【整理修订】Android.mk详解

    Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...

  2. java新手笔记30 集合

    1.set/list package com.yfs.javase; import java.util.ArrayList; import java.util.Collection; import j ...

  3. java进阶一之jdk8新特性

    1.官方发布的jdk8新特性 2.51CTO相关专题

  4. Poj 2996 Help Me with the Game

    1.Link: http://poj.org/problem?id=2996 2.Content: Help Me with the Game Time Limit: 1000MS   Memory ...

  5. 最全 Adobe 系列产品 CS6版本 序列号/注册码

    最全 Adobe 系列产品 CS6版本 序列号/注册码: 1.Adobe Photoshop CS6 Extended 序列号/注册码 2.Adobe After Effects CS6 序列号/注册 ...

  6. L007-oldboy-mysql-dba-lesson07

    L007-oldboy-mysql-dba-lesson07 [root@web01 ~]# mysqldump -uroot -ptestpassword -A >/root/mysql_ba ...

  7. JSON C# Class Generator ---由json字符串生成C#实体类的工具

    json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...

  8. 前端工程模块化——以一个php项目为例

    实现一个页面功能总是需要 JavaScript.CSS 和 Template 三种语言相互组织,所以我们真正需要的是一种可以将 JavaScript.CSS 和 Template 同时都考虑进去的模块 ...

  9. c语言背后的运行机制

    目的:通过分析c语言转换成汇编代码后的执行过程对汇编语言和X86构架有一个初步认识 实验代码 #include <stdio.h> int g(int x) { ; } int f(int ...

  10. iOS 进阶 第一天(0323)

    0323 Storyboard连线错误 如下图: 不允许直接修改对象的结构体属性成员,但允许直接整体修改对象的结构体属性 如下图: 打印一个控件对象的frame 如下图: 如果一个控件无论怎么改变它的 ...