点击打开链接

题意:

给你一个平面,每次加入一个点,当点数>=2时,求最近点对距离的平方,最后输出所有的平方和。

给你a,b,c x[0]=0;x[i]=(x[i-1]*a+b)%c

如果按照平常的方法,每次都进行分治法求最近点对,会TLE,如果利用容器,每次都对x从小到大排序,没加入一个点p,找出比p大的第一个数,然后从这个数从两边开始找,如果x*x已经大于ans了,就可以跳出来了。。最后加起来就ok了;

#include"stdio.h"
#include"string.h"
#include"algorithm"
#include"set"
#define N 500005
typedef __int64 LL;
using namespace std;
struct node
{
LL x,y;
bool operator<(const node &a)const
{
return x<a.x;
}
};
LL x[N],y[N],n;
void fun(LL n,LL x[])
{
LL a,b,c;
scanf("%I64d%I64d%I64d",&a,&b,&c);
int i=0;
x[i]=0;
for(i=1;i<=n;i++)
x[i]=(x[i-1]*a+b)%c;
}
LL min(LL a,LL b)
{
return a<b?a:b;
}
void find()
{
LL i;
LL ans;
LL sum;
LL m1,m2;
scanf("%I64d",&n);
fun(n,x);
fun(n,y);
ans=(LL)1<<60;
sum=0;
multiset<node>M;
for(i=1;i<=n;i++)
{
node p;
p.x=x[i];
p.y=y[i];
if(i>1)
{
multiset<node>::iterator it=M.lower_bound(p),e;
//M.lower_bound返回指向大于(或等于)p的第一个元素的迭代器
for(e=it;e!=M.end();e++)
{
m1=e->x-p.x;
if(m1*m1>=ans)break;
m2=e->y-p.y;
ans=min(ans,m1*m1+m2*m2);
}
for(e=it;e!=M.begin();)
{
e--;
m1=e->x-p.x;
if(m1*m1>=ans)break;
m2=e->y-p.y;
ans=min(ans,m1*m1+m2*m2);
}
sum+=ans;
}
M.insert(p);
}
printf("%I64d\n",sum);
M.clear();
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
find();
return 0;
}

hdu 4631(最近点对,容器)的更多相关文章

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

    http://acm.hdu.edu.cn/showproblem.php?pid=4631 题意: 在平面内依次加点,求每次加点后最近点对距离平方的和 因为是找平面最近点对...所以加点以后这个最短 ...

  2. HDU 4631 Sad Love Story (2013多校3 1011题 平面最近点对+爆搞)

    Sad Love Story Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others ...

  3. hdu 4631 Sad Love Story

    http://acm.hdu.edu.cn/showproblem.php?pid=4631 没想到这道题需要用“平均时间复杂度” 计算   一直没有想到解法  因为不符考虑了最坏情况的理念 方法一: ...

  4. hdu 4277 USACO ORZ (暴力+set容器判重)

    USACO ORZ Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  5. hdu 1007最近点对问题

    先说下题意,很简单,给n个点的坐标,求距离最近的一对点之间距离的一半.第一行是一个数n表示有n个点,接下来n行是n个点的x坐标和y坐标,实数. 这个题目其实就是求最近点对的距离.主要思想就是分治.先把 ...

  6. HDU 2593 Pirates’ Code (STL容器)

    题目链接 Problem Description Davy Jones has captured another ship and is smiling contently under the sun ...

  7. zoj 2107&&hdu 1007最近点对问题

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1107 Quoit Design Time Limit: 5 Seconds   ...

  8. hdu 1007 最近点对问题(Splay解法)

    为什么要写这个题..经典啊,当然,别以为我用分治做的,不过主要思想还是那神奇的六个点共存(一个h*2h的矩形中最多能放下多少个点使得两两距离不超过h) 其实我是在这里看到的 http://commun ...

  9. 【 2013 Multi-University Training Contest 3 】

    HDU 4622 Reincarnation 枚举字符串的起点,构造后缀自动机,每次插入一个字符,就能统计得到当前不同字串的个数,预处理出所有的询问. #include<cstdio> # ...

随机推荐

  1. CSS中的高度

    https://developer.mozilla.org/en-US/docs/Web/API/element.clientHeight Element.clientHeight是只读属性,以像素为 ...

  2. UVA-10735 - Euler Circuit(混合欧拉回路输出)

    题意:给你一个图,有N个点,M条边,这M条边有的是单向的,有的是双向的. 问你能否找出一条欧拉回路,使得每条边都只经过一次! 分析: 下面转自别人的题解: 把该图的无向边随便定向,然后计算每个点的入度 ...

  3. 英蓓特Mars board的android4.0.3源码编译过程

    英蓓特Mars board的android4.0.3源码编译过程 作者:StephenZhu(大桥++) 2013年8月22日 若要转载,请注明出处 一.编译环境搭建及要点: 1. 虚拟机软件virt ...

  4. 总结的一些封装好的javascript函数

    平时总结的一些常用javascript函数封装: //获取样式 function getStyle(obj,name){ if(obj.currentStyle){ return obj.curren ...

  5. log4jdbc与logback集合打印日志过多的解决

    在项目中使用了log4jdbc,可以很方便的把sql的参数也打印出来,便于问题调试.比如原始sql: select * from t_order where order_id = ? : 经过log4 ...

  6. 【Java】Java8新增的Lambda表达式_学习笔记

    一.Lambda表达式可以简化创建匿名内部类对象 1.不需要new XXX(){}这种繁琐代码. 2.不需要指出重写的方法名. 3.不要给出重写的方法的返回值类型. 4.Lambda相当于一个匿名方法 ...

  7. 手游Apk破解疯狂,爱加密apk加固保护开发人员

    2013年手游行业的规模与收入均实现了大幅增长,发展势头强劲.权威数据显示, 我国移动游戏市场实际销售收入从2012年的32.4亿猛增到2013年的112.4亿元,同比增长了246.9%,手游用户从2 ...

  8. 计算任意位数的Pi

    当用程序实现求pi的值时,也许你能够很快写出算法(利用求pi的几个公式),但是由于使用单变量保存结果,限于计算机硬件对变量的表示范围有限,因此,最多只能计算出pi值小数点后十多位.但需要得到一个更大位 ...

  9. 常用颜色大全---RGB值及中英文名称

    ■■■■■ #DC143C Crimson 深红/猩红 ■■■■■ #FFF0F5 LavenderBlush 淡紫红 ■■■■■ #DB7093 PaleVioletRed 弱紫罗兰红 ■■■■■ ...

  10. EEPlat 的数据层模式

    EEPlat 的数据库底层架构能够同一时候支持多种数据库的集成应用.同一时候能够支持分布式数据库的集成应用.业务对象通过指定数据源与对应的数据库通过数据源层进行数据交互,数据源层通过数据库种类.自己主 ...