HDU4631+Set+最近点对
题意:一个空平面,每次增加一个点,
其坐标根据上一个点算出:(x[i-1] * Ax + Bx ) mod Cx,(y[i-1] * Ay + By ) mod Cy
求出现有点集中的最近点对的距离的平方,共增加n个点,求每次求得的平方的和
http://blog.csdn.net/liuledidai/article/details/9664031
- /*
- set+最近点对
- 每次对于一个新插入的点,找出x与之最近的,然后分别向两侧搜
- 题意:一个空平面,每次增加一个点,
- 其坐标根据上一个点算出:(x[i-1] * Ax + Bx ) mod Cx,(y[i-1] * Ay + By ) mod Cy
- 求出现有点集中的最近点对的距离的平方,共增加n个点,求每次求得的平方的和
- */
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- #include<algorithm>
- #include<iostream>
- #include<queue>
- #include<map>
- #include<set>
- #include<math.h>
- using namespace std;
- typedef long long int64;
- //typedef __int64 int64;
- const int maxn = 5e5+;
- const int64 inf = ;
- const double pi=acos(-1.0);
- const double eps = 1e-;
- struct Node{
- int64 x,y;
- };
- Node cur,nxt;
- typedef pair<int64,int64> PII;
- #define MP(a,b) make_pair((a),(b))
- set< pair<int64,int64> > s;
- int main(){
- int T;
- scanf("%d",&T);
- while( T-- ){
- int64 Ax,Bx,Cx,Ay,By,Cy;
- int n;
- scanf("%d%I64d%I64d%I64d%I64d%I64d%I64d",&n,&Ax,&Bx,&Cx,&Ay,&By,&Cy);
- //scanf("%d%lld%lld%lld%lld%lld%lld",&n,&Ax,&Bx,&Cx,&Ay,&By,&Cy);
- s.clear();
- cur.x = cur.y = ;
- nxt.x = (Ax*cur.x+Bx)%Cx;
- nxt.y = (Ay*cur.y+By)%Cy;
- cur = nxt;
- s.insert( MP(cur.x,cur.y) );
- n--;
- int64 res,Min;
- res = ;
- Min = inf;
- while( n-- ){
- if( Min== ) break;
- nxt.x = (Ax*cur.x+Bx)%Cx;
- nxt.y = (Ay*cur.y+By)%Cy;
- cur = nxt;
- if( s.count(MP(cur.x,cur.y)) ) {
- res += ;
- break;
- }
- s.insert( MP(cur.x,cur.y) );
- set<PII>::iterator it,tmp;
- it = s.lower_bound( MP(cur.x,cur.y) );
- for( tmp=it,tmp++;tmp!=s.end();tmp++ ){
- int64 tx = (*tmp).first;
- int64 ty = (*tmp).second;
- if( (tx-cur.x)*(tx-cur.x)>=Min ) break;
- else{
- int64 Dis = (tx-cur.x)*(tx-cur.x)+(ty-cur.y)*(ty-cur.y);
- Min = min( Min,Dis );
- }
- }
- for( tmp=it,tmp--;it!=s.begin();tmp-- ){
- int64 tx = (*tmp).first;
- int64 ty = (*tmp).second;
- if( (tx-cur.x)*(tx-cur.x)>=Min ) break;
- else{
- int64 Dis = (tx-cur.x)*(tx-cur.x)+(ty-cur.y)*(ty-cur.y);
- Min = min( Min,Dis );
- }
- if( tmp==s.begin() ) break;
- }
- res += Min;
- }
- //printf("%lld\n",res);
- printf("%I64d\n",res);
- }
- return ;
- }
HDU4631+Set+最近点对的更多相关文章
- HDU-4631 Sad Love Story 平面最近点对
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4631 数据是随机的,没有极端数据,所以可以分段考虑,最小值是一个单调不增的函数,然后每次分治算平面最近 ...
- [hdu4631 Sad Love Story]最近点对,枚举
题意:S是平面内点的集合,初始为空,每次向集合里面加入一个点P(x,y),询问S内最近点对的距离的平方和 思路:设当前集合的答案为D,则找到集合里面横坐标在(x-√D,x+√D)内的数,用它们来更新答 ...
- ICP算法(Iterative Closest Point迭代最近点算法)
标签: 图像匹配ICP算法机器视觉 2015-12-01 21:09 2217人阅读 评论(0) 收藏 举报 分类: Computer Vision(27) 版权声明:本文为博主原创文章,未经博主允许 ...
- Quoit Design---hdu1007(最近点对问题 分治法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1007 题意:给你n(2<=n<=10^6)个点的坐标,然后找到两个点使得他们之间的距离最小 ...
- 求空间内两条直线的最近距离以及最近点的坐标(C++)
关键词:空间几何 用途:总有地方会用到吧 文章类型:C++函数展示 @Author:VShawn(singlex@foxmail.com) @Date:2016-11-19 @Lab: CvLab20 ...
- HDU 1007Quoit Design(最近点问题)
最近点问题:二维平面中有n(n很大)个点,求出距离最近的两个点 思路:因为n的值很大,所以暴力和dp都行不通了吧!分治法就挺好的. 将区间一半一半的分开,直到分成只有一个点或两个点的时候! 对于只有两 ...
- 程序员编程艺术第三十六~三十七章、搜索智能提示suggestion,附近点搜索
第三十六~三十七章.搜索智能提示suggestion,附近地点搜索 作者:July.致谢:caopengcs.胡果果.时间:二零一三年九月七日. 题记 写博的近三年,整理了太多太多的笔试面试题,如微软 ...
- 计算几何 平面最近点对 nlogn分治算法 求平面中距离最近的两点
平面最近点对,即平面中距离最近的两点 分治算法: int SOLVE(int left,int right)//求解点集中区间[left,right]中的最近点对 { double ans; //an ...
- 2.11 2D平面最近点对问题[closest pair problem]
[本文链接] http://www.cnblogs.com/hellogiser/p/closest-pair-problem.html [题目] 给定平面上N个点的坐标,找出距离最近的两个点之间的距 ...
随机推荐
- 【整理修订】Android.mk详解
Android.mk详解 1. Android.mk 的应用范围 Android.mk文件是GNU Makefile的一小部分,它用来对Android程序进行编译. 一个Android.mk文件可以编 ...
- java新手笔记30 集合
1.set/list package com.yfs.javase; import java.util.ArrayList; import java.util.Collection; import j ...
- java进阶一之jdk8新特性
1.官方发布的jdk8新特性 2.51CTO相关专题
- 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 ...
- 最全 Adobe 系列产品 CS6版本 序列号/注册码
最全 Adobe 系列产品 CS6版本 序列号/注册码: 1.Adobe Photoshop CS6 Extended 序列号/注册码 2.Adobe After Effects CS6 序列号/注册 ...
- L007-oldboy-mysql-dba-lesson07
L007-oldboy-mysql-dba-lesson07 [root@web01 ~]# mysqldump -uroot -ptestpassword -A >/root/mysql_ba ...
- JSON C# Class Generator ---由json字符串生成C#实体类的工具
json作为互联网上轻量便捷的数据传输格式,越来越受到重视.但在服务器端编程过程中,我们常常希望能通过智能提示来提高编码效率.JSON C# Class Generator 能将json格式所表示的J ...
- 前端工程模块化——以一个php项目为例
实现一个页面功能总是需要 JavaScript.CSS 和 Template 三种语言相互组织,所以我们真正需要的是一种可以将 JavaScript.CSS 和 Template 同时都考虑进去的模块 ...
- c语言背后的运行机制
目的:通过分析c语言转换成汇编代码后的执行过程对汇编语言和X86构架有一个初步认识 实验代码 #include <stdio.h> int g(int x) { ; } int f(int ...
- iOS 进阶 第一天(0323)
0323 Storyboard连线错误 如下图: 不允许直接修改对象的结构体属性成员,但允许直接整体修改对象的结构体属性 如下图: 打印一个控件对象的frame 如下图: 如果一个控件无论怎么改变它的 ...