hdu4631Sad Love Story(多校3)(最接近点对)
http://acm.hdu.edu.cn/showproblem.php?pid=4631
比赛的时候搜到了最接近点对的求法 Nlog(N) 又估摸着依次插入求的话会TLE 想了想觉得可以先把最近的位置求出来 然后后面的直接不用求了 依次直到减完 又觉得可能会有变态的数据每次最近的都在最后面 没敢写。。后来 发现它出现在题解的方法三中。。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 500005
#define LL long long
#define INF 1000000000000000000
int mm;
LL d;
struct Point
{
LL x;
LL y;
int p;
}point[N],tt[N];
int tmpt[N]; bool cmpxy(const Point& a, const Point& b)
{
if(a.x != b.x)
return a.x < b.x;
return a.y < b.y;
}
bool cmpy(const int& a, const int& b)
{
return point[a].y < point[b].y;
} LL min(LL a, LL b)
{
return a < b ? a : b;
} LL dis(int i, int j)
{
return (point[i].x-point[j].x)*(point[i].x-point[j].x)
+ (point[i].y-point[j].y)*(point[i].y-point[j].y);
}
void Closest_Pair(int left, int right)
{
if(left==right)
{
return ;
}
if(left + == right)
{
LL xx = dis(left, right);
if(d>xx)
{ d = xx;
mm = max(point[left].p,point[right].p);
}
return ;
}
int mid = (left+right)>>;
Closest_Pair(left,mid);
Closest_Pair(mid+,right);
int i,j,k=;
for(i = left; i <= right; i++)
{
if((point[mid].x-point[i].x)*(point[mid].x-point[i].x) <= d)
tmpt[k++] = i;
}
sort(tmpt,tmpt+k,cmpy);
for(i = ; i < k; i++)
{
for(j = i+; j < k && (point[tmpt[j]].y-point[tmpt[i]].y)*(point[tmpt[j]].y-point[tmpt[i]].y)<d; j++)
{
LL d3 = dis(tmpt[i],tmpt[j]);
if(d > d3)
{
d = d3;
mm = max(point[tmpt[j]].p,point[tmpt[i]].p);
}
}
}
}
int main()
{
int t,a[],i;
cin>>t;
while(t--)
{
for(i = ; i <= ; i++)
cin>>a[i];
point[i].x = ;
point[i].y = ;
for(i = ; i <= a[] ; i++)
{
point[i].x = (point[i-].x*a[]+a[])%a[];
point[i].y = (point[i-].y*a[]+a[])%a[];
point[i].p = i;
tt[i].x = point[i].x;
tt[i].y = point[i].y;
tt[i].p = i;
}
LL s=;
int n = a[];
while()
{
sort(point+,point+n+,cmpxy);
d = INF;
Closest_Pair(,n);
s+=(n-mm+)*d;
n = mm-;
for(i = ; i <= n ; i++)
{
point[i].x = tt[i].x;
point[i].y = tt[i].y;
point[i].p = tt[i].p;
}
if(n<=)
break;
}
cout<<s<<endl;
}
return ;
}
hdu4631Sad Love Story(多校3)(最接近点对)的更多相关文章
- 2017 多校4 Security Check
		2017 多校4 Security Check 题意: 有\(A_i\)和\(B_i\)两个长度为\(n\)的队列过安检,当\(|A_i-B_j|>K\)的时候, \(A_i和B_j\)是可以同 ... 
- hdu6074[并查集+LCA+思维] 2017多校4
		看了标答感觉思路清晰了许多,用并查集来维护全联通块的点数和边权和. 用另一个up[]数组(也是并查集)来保证每条边不会被重复附权值,这样我们只要将询问按权值从小到大排序,一定能的到最小的边权和与联通块 ... 
- 【2019多校第一场补题 / HDU6578】2019多校第一场A题1001Blank——dp
		HDU6578链接 题意 有一串字符串,仅由 {0,1,2,3}\{0, 1, 2, 3\}{0,1,2,3} 组成,长度为 nnn,同时满足 mmm 个条件.每个条件由三个整数组成:l.r.xl.r ... 
- NOIP模拟92&93(多校26&27)
		前言 由于太菜了,多校26 只改出来了 T1 ,于是直接并在一起写啦~~~. T0 NOIP 2018 解题思路 第一次考场上面写三分,然而我并不知道三分无法处理不是严格单峰的情况,但凡有一个平台都不 ... 
- 【开源毕设】一款精美的家校互动APP分享——爱吖校推 [你关注的,我们才推](持续开源更新3)附高效动态压缩Bitmap
		一.写在前面 爱吖校推如同它的名字一样,是一款校园类信息推送交流平台,这么多的家校互动类软件,你选择了我,这是我的幸运.从第一次在博客园上写博客到现在,我一次一次地提高博文的质量和代码的可读性,都是为 ... 
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
		我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ... 
- P1774 最接近神的人_NOI导刊2010[树状数组 逆序对 离散化]
		题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着“神的殿堂”.小FF猜想里面应该就有王室的 ... 
- NTP校时设置
		一.Windows Server 2008 – Time Server 前言: 国家时间与频率标准实验室 && NTP服务器 也可以忽略1~6 直接跳7 如果已改过机码请使用 1 ... 
- 2016暑假多校联合---Rikka with Sequence (线段树)
		2016暑假多校联合---Rikka with Sequence (线段树) Problem Description As we know, Rikka is poor at math. Yuta i ... 
随机推荐
- 同时存在两个或多个homestead 虚拟box
			开发中发现,不同版本的homestead 里面的环境各不相同,里面的node,npm等版本都不一致,如果需要添加 不同版本的homestead同时存在可以按照以下办法处理. tips: 提供可以离线下 ... 
- 解决 Chrome 浏览器自动调整小于11px字体的问题
			不知道说是 Chrome 智能呢?还是说它多此一举?Chrome 浏览器中存在默认会自动将小于11px大小的字体调整为12px.我在写 BlueNight 主题的最新评论时候就设置了评论发布时间为11 ... 
- 1059. Prime Factors (25)
			时间限制 50 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 HE, Qinming Given any positive integer N, y ... 
- Java 多线程 简单实例 (Runnable)
			1.多线程实例 package second; public class A implements Runnable { public char stat = '*'; public void run ... 
- 拉链法解决Hash节点冲突问题
			<?php /* * hash::拉链法解决hash节点存储冲突问题 * ::2014-07-02 * ::Small_Kind */ class small_hash { private $s ... 
- ASP.NET中POST数据并跳转页面
			需求:先Post提交数据,然后跳转到目标页面 找了好久才发现这个神奇的类HttpHelper.原理很简单,利用html的from表单拼接,然后执行 使用方法: NameValueCollection ... 
- iOS  的UINavigationController详解与使用添加UIBarButtonItem
			转发自:http://blog.csdn.net/totogo2010/article/details/7681879 分类: iOS开发入门2012-06-21 11:10 53077人阅读 评论( ... 
- Spring AOP进行日志记录
			在java开发中日志的管理有很多种.我一般会使用过滤器,或者是Spring的拦截器进行日志的处理.如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个 ... 
- 实战开发中UI资源制作标准
			资源制作标准设定建议 1.所有的UI资源全部采用PNG导出 因为Unity不支持外部压缩,所以,不论是用PNG还是JPG,只要尺寸相同,资源量在引擎中都会是一样大.所以,可以大胆地采用PNG进行输出, ... 
- (转载)猫都能学会的Unity3D Shader入门指南(一)
			原文地址 http://onevcat.com/2013/07/shader-tutorial-1/ 动机 自己使用Unity3D也有一段时间了,但是很多时候是流于表面,更多地是把这个引擎简单地用作脚 ... 
