Sad Love Story

Time Limit: 40000/20000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)
Total Submission(s): 16    Accepted Submission(s): 2

Problem Description
There's a really sad story.It could be about love or about money.But love will vanish and money will be corroded.These points will last forever.So this time it is about points on a plane.
We have a plane that has no points at the start.
And at the time i,we add point pi(xi, yi).There is n points in total.
Every time after we add a point,we should output the square of the distance between the closest pair on the plane if there's more than one point on the plane.
As there is still some love in the problem setter's heart.The data of this problem is randomly generated.
To generate a sequence x1, x2, ..., xn,we let x0 = 0,and give you 3 parameters:A,B,C. Then xi = (xi-1 * A + B) mod C.
The parameters are chosen randomly.
To avoid large output,you simply need output the sum of all answer in one line.
 
Input
The first line contains integer T.denoting the number of the test cases.
Then each T line contains 7 integers:n Ax Bx Cx Ay By Cy.
Ax,Bx,Cx is the given parameters for x1, ..., xn.
Ay,By,Cy is the given parameters for y1, ..., yn.
T <= 10. 
n <= 5 * 105.
104 <= A,B,C <= 106.
 
Output
For each test cases,print the answer in a line.
 
Sample Input
2
5 765934 377744 216263 391530 669701 475509
5 349753 887257 417257 158120 699712 268352
 
Sample Output
8237503125
49959926940

Hint

If there are two points coincide,then the distance between the closest pair is simply 0.

 
Source
 
Recommend
zhuyuanchen520
 

这道题目的意思就是不断加入n个点。

当点数>=2的时候,每加入一个点累加两点间最近距离的平方。

按照给定的Ax,Bx,Cx,Ay,By,Cy,以及递推式可以产生n个点。

The data of this problem is randomly generated.

根据这句话,知道数据是随机产生,没有极端数据。

所有首先n个点,做一下最近点对,复杂度O(nlogn)

然后产生的最近点对,对于编号在最近点对后面的结果都可以累加了,同时后面的点也不需要了。

所有去掉一部分点再次进行最近点对。

这样不断重复,直到剩下一个点为止。

/*
* Author:kuangbin
* 1011.cpp
*/ #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <iostream>
#include <map>
#include <vector>
#include <queue>
#include <set>
#include <string>
#include <math.h>
using namespace std;
const int MAXN = ;
struct Point
{
int x,y;
int id;
int index;
Point(int _x = ,int _y = ,int _index = )
{
x = _x;
y = _y;
index = _index;
}
}; Point P[MAXN]; long long dist(Point a,Point b)
{
return ((long long)(a.x-b.x)*(a.x-b.x) + (long long)(a.y-b.y)*(a.y-b.y));
}
Point p[MAXN];
Point tmpt[MAXN];
bool cmpxy(Point a,Point b)
{
if(a.x != b.x)return a.x < b.x;
else return a.y < b.y;
}
bool cmpy(Point a,Point b)
{
return a.y < b.y;
}
pair<int,int> Closest_Pair(int left,int right)
{
long long d = (1LL<<);
if(left == right)return make_pair(left,right);
if(left + == right)
return make_pair(left,right);
int mid = (left+right)/;
pair<int,int>pr1 = Closest_Pair(left,mid);
pair<int,int>pr2 = Closest_Pair(mid+,right);
long long d1,d2;
if(pr1.first == pr1.second)
d1 = (1LL<<);
else d1 = dist(p[pr1.first],p[pr1.second]); if(pr2.first == pr2.second)
d2 = (1LL<<);
else d2 = dist(p[pr2.first],p[pr2.second]); pair<int,int>ans;
if(d1 < d2)ans = pr1;
else ans = pr2; d = min(d1,d2); int k = ;
for(int i = left;i <= right;i++)
{
if((long long)(p[mid].x - p[i].x)*(p[mid].x - p[i].x) <= d)
tmpt[k++] = p[i];
}
sort(tmpt,tmpt+k,cmpy);
for(int i = ;i <k;i++)
{
for(int j = i+;j < k && (long long)(tmpt[j].y - tmpt[i].y)*(tmpt[j].y - tmpt[i].y) < d;j++)
{
if(d > dist(tmpt[i],tmpt[j]))
{
d = dist(tmpt[i],tmpt[j]);
ans = make_pair(tmpt[i].id,tmpt[j].id);
}
}
}
return ans;
} int main()
{
//freopen("in.txt","r",stdin);
// freopen("out.txt","w",stdout);
int T;
int n,Ax,Ay,Bx,By,Cx,Cy;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d%d%d%d",&n,&Ax,&Bx,&Cx,&Ay,&By,&Cy);
P[] = Point(,,);
for(int i = ;i <= n;i++)
{
long long x= ((long long)P[i-].x*Ax + Bx)%Cx;
long long y = ((long long)P[i-].y*Ay + By)%Cy;
P[i] = Point(x,y,i);
}
int end = n;
long long ans = ;
while(end > )
{
for(int i = ;i < end;i++)
p[i] = P[i+];
sort(p,p+end,cmpxy);
for(int i = ;i < end;i++)
p[i].id = i;
pair<int,int>pr = Closest_Pair(,end-);
int Max = max(p[pr.first].index,p[pr.second].index);
ans += (long long)(end-Max+)*dist(p[pr.first],p[pr.second]);
end = Max-;
}
printf("%I64d\n",ans); }
return ;
}

HDU 4631 Sad Love Story (2013多校3 1011题 平面最近点对+爆搞)的更多相关文章

  1. HDU 4691 Front compression (2013多校9 1006题 后缀数组)

    Front compression Time Limit: 5000/5000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Othe ...

  2. HDU 4679 Terrorist’s destroy (2013多校8 1004题 树形DP)

    Terrorist’s destroy Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  3. HDU 4671 Backup Plan (2013多校7 1006题 构造)

    Backup Plan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)Total ...

  4. HDU 4667 Building Fence(2013多校7 1002题 计算几何,凸包,圆和三角形)

    Building Fence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)To ...

  5. HDU 4658 Integer Partition (2013多校6 1004题)

    Integer Partition Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  6. HDU 4611 Balls Rearrangement(2013多校2 1001题)

    Balls Rearrangement Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Othe ...

  7. HDU 4655 Cut Pieces(2013多校6 1001题 简单数学题)

    Cut Pieces Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total ...

  8. HDU 4705 Y (2013多校10,1010题,简单树形DP)

    Y Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submiss ...

  9. HDU 4704 Sum (2013多校10,1009题)

    Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submi ...

随机推荐

  1. exit() _exit() 函数区别

    exit(): --stdlib.h (1) 所有使用atexit()注册的函数,将会被以注册相反的顺序调用: (2) 所有打开的输出流被刷新,并且关闭流: (3) 使用tmpfile()创建的文件将 ...

  2. monkey测试===Monkey测试策略(系列二)转

    Monkey的测试策略 一. 分类 Monkey测试针对不同的对象和不同的目的采用不同的测试方案,首先测试的对象.目的及类型如下: 测试的类型分为:应用程序的稳定性测试和压力测试 测试对象分为:单一a ...

  3. springboot项目的搭建

    原文链接:http://www.cnblogs.com/winner-0715/p/6666302.html 后续完善(附图及详细过程)

  4. IIS配置PHP环境(快速最新版)(转载+自创)

    (参考转载的) 我们知道php配置有几种: 1.CGI方式加载PHP环境,通常就是IIS里面配置解释器为php.exe,早期比较常见,目前使用较少. 特点是:稳定,但效率太低. 2.ISAPI方式加载 ...

  5. 高性能网络编程(1)—accept建立连接‍(待研究)

    阿里云博客上一篇感觉还不错的文章,待研究,原文链接如下: http://blog.aliyun.com/673?spm=5176.7114037.1996646101.3.oBgpZQ&pos ...

  6. 数字签名(以ActiveXDemo为例)

    1.创建Install.inf文件和run.bat Install.inf: [version] signature="$CHICAGO$" AdvancedINF=2.0 [Se ...

  7. javascript方法--call()

    关于call方法,以前经常看到这个方法,但是也没怎么用心去学习,后来觉得不行,所以知识在一点一点补~ 今天对自己学习call方法做一下总结 其实,学了call方法,会发现call跟apply其实是很像 ...

  8. Leetcode 之Largest Rectangle in Histogram(40)

    又是一道构思巧妙的题,暴力求解复杂度太高,通过构造一个递增栈来解决:如果当前元素小于栈顶元素,则说明栈内已经构成一个 递增栈,则分别计算以每个元素为最低值的面积:反之,则入栈. int largest ...

  9. php上传文件限制

    客户端限制(客户端限制在实际上是无法阻止上传): 通过表单隐藏域限制上传文件的最大值 <input type=’hidden’ name=’MAX_FILE_SIZE’ value=’字节数’ ...

  10. CentOS7安装和配置samba

    (1)samba简介 CIFS:通用的internet文件系统,windows和unix系统之间共享文件的一种协议;客户端主要是windows:支持多节点同时挂载以及并发写入 (2)samba主配置文 ...