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 ...
随机推荐
- 跟着PHP100第一季学写一个CMS(1-10)
笔记: 这次用的方法是先跟着视频做一遍,隔一天或半天后独立再做一遍,能发现真正不会的地方记录下来. CMS0.1界面布局1.问题:分两个css来实现时basic.css+index.php出现定位不正 ...
- VLAN和Trunk
Vlan实验题: 如图所示 解答过程 (一)相同vlan之间的设备全连通 1. 在SW1和SW2上分别创建vlan2和vlan3, 命令如下 SW1# vlan database SW1(vlan)# ...
- Nat网络地址转换
Nat中的术语 -------------------------------------------------------------------------------------------- ...
- Django文档——Model字段类型(Field Types)
大部分内容参考自http://wrongwaycn.github.io/django11/topics/db/models/index.html#topics-db-models ,内容是django ...
- 帝国cms中 内容分页的SEO优化
关于内容页如果存在分页的话,我们想区分第一页和后面数页,当前的通用做法是在标题上加入分页码,帝国cms中如何做到呢.我们可以修改在e/class/functions.php中的源码.找到找到GetHt ...
- NEV_SDK开发环境部署手册
根据项目开发需求,要在MEC服务器上部署如下内容:Nginx.Nginx push stream module.Jason CPP.Spawn-fcgi.libfcgi.Redis.Hiredis.B ...
- MySQL日期和时间函数
WEEKDAY( date ) 返回date的星期索引( = 星期天 ) . mysql> select WEEKDAY( '1997-10-04 22:23:00' ) ; mysql> ...
- LINQ to XML学习笔记
一.XML基础知识 1.XML:可扩展标记语言 Extensible Markup Language ,提供了一种保存数据的格式,数据可以通过这种格式很容易地在不同的应用程序之间实现共享. 2.使用X ...
- Mac 启用http-dav功能(WebDAV服务器)
启用Mac的WebDAV可以实现文件的上传以及Windows.Linux和Mac之间的数据互传. 客户端使用:windows下使用网上邻居 --> 添加一个网上邻居 --> 输入uplo ...
- 【BZOJ 1951】 [Sdoi2010]古代猪文
Description “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色的大草坪,他们善良勇敢相互都关心……” ——选自猪王国民歌 很久很久以前,在山的那边 ...