http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3521

ATTENTION:如果用long long 减小误差,这道题只能用%lld读入

首先需要判断哪些点是相互挨着的,这样比直接维护哪些集合是冰冻住的简单

按照x为主,y为辅排序,在数组上尺取,当head与tail的x坐标相差大于l/2则把head向后移动直到x坐标满足条件,

那么对于head到tail,现在的问题就只剩下检测出哪些点之间y间距小于l/2,把它们都按照pair<y,id>加入set,那么离tail最近的两个点的y坐标就是离tail最近的,如果其中某个点满足间距小于l/2,那么就把tail和这个点放在一个并查集里,(其他的点如果满足条件,会和这两个点在一个并查集里)

最后统计一下哪些并查集是被冰冻住的,以及这些并查集中有多少点即可

#include <cstdio>
#include <cstring>
#include <set>
#include <algorithm>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> P;
const int maxn=5e4+3;
int n;
ll r,l;
P pnt[maxn],o;
int par[maxn];
bool in[maxn]; ll dis(P a,P b){return (a.first-b.first)*(a.first-b.first)+(a.second-b.second)*(a.second-b.second);} int fnd(int i){return(par[i]==i?i:(par[i]=fnd(par[i])));}
bool same(int a,int b){return fnd(a)==fnd(b);}
void unite(int a,int b){
if(!same(a,b)){
par[par[b]]=par[a];
}
} void solve(){
set<P> st;
int head=0;
for(int tail=0;tail<n;tail++){
while(2*abs(pnt[tail].first-pnt[head].first)>l){
st.erase(P(pnt[head].second,head));
head++;
}
set<P>::iterator it = st.insert(P(pnt[tail].second,tail)).first;
if(it!=st.begin()){
it--;
//printf("s:%lld %lld\n",it->first,pnt[tail].second);
if(2*abs(pnt[tail].second-it->first)<=l){
unite(tail,it->second);
}
it++;
} it++;
if(it!=st.end()){
if(2*abs(it->first-pnt[tail].second)<=l){
unite(tail,it->second);
}
}
}
} void output(){
int ans=0;
for(int i=0;i<n;i++){
if(dis(pnt[i],o)<=r*r){
if(!in[fnd(i)]){
in[par[i]]=true;
}
}
}
for(int i=0;i<n;i++){
if(in[fnd(i)]){
ans++;
}
} printf("%d\n",ans);
}
int main(){
while(scanf("%d%lld%lld",&n,&r,&l)==3){
memset(in,0,sizeof(in));
for(int i=0;i<n;i++){
scanf("%lld%lld",&(pnt[i].first),&(pnt[i].second));
par[i]=i;
}
scanf("%lld%lld",&(o.first),&(o.second)); sort(pnt,pnt+n); solve();
output();
}
return 0;
}

  

ZOJ 3521 Fairy Wars oj错误题目,计算几何,尺取法,排序二叉树,并查集 难度:2的更多相关文章

  1. 【九度OJ】题目1023:EXCEL排序 解题报告

    [九度OJ]题目1023:EXCEL排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1023 题目描述: E ...

  2. 【九度OJ】题目1185:特殊排序 解题报告

    [九度OJ]题目1185:特殊排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1185 题目描述: 输入一系 ...

  3. 【九度OJ】题目1061:成绩排序 解题报告

    [九度OJ]题目1061:成绩排序 解题报告 标签(空格分隔): 九度OJ [LeetCode] http://ac.jobdu.com/problem.php?pid=1061 题目描述: 有N个学 ...

  4. 【九度OJ】题目1196:成绩排序 解题报告

    [九度OJ]题目1196:成绩排序 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1196 题目描述: 用一维数组存储学号和成绩,然后 ...

  5. poj 1127 -- Jack Straws(计算几何判断两线段相交 + 并查集)

    Jack Straws In the game of Jack Straws, a number of plastic or wooden "straws" are dumped ...

  6. ZOJ 3811 / 2014 牡丹江赛区网络赛 C. Untrusted Patrol bfs/dfs/并查集

    Untrusted Patrol Time Limit: 3 Seconds                                     Memory Limit: 65536 KB    ...

  7. HDU 3076 ssworld VS DDD 概率dp,无穷级数,oj错误题目 难度:2

    http://acm.hdu.edu.cn/showproblem.php?pid=3076 不可思议的题目,总之血量越少胜率越高,所以读取时把两人的血量交换一下 明显每一轮的胜率和负率都是固定的,所 ...

  8. UVa 11627 - Slalom 二分. oj错误题目 难度: 0

    题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...

  9. 【九度OJ】题目1061:成绩排序

    题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息. 输入: 测试数据有多组,每组输入 ...

随机推荐

  1. 安装java项目开发环境

    搭建java 查看本机是否已有java 如果有,请卸载. 下载jdk 复制到服务器中 临时配置你在shell里面改,只是做了临时更改啊,一重启就没了 配置到系统的环境变量里 export JAVA_H ...

  2. 54. Spiral Matrix(矩阵,旋转打印)

    Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral or ...

  3. visual studio开发工具的C#主流控件属性一览表

    visual studio开发工具的C#主流控件属性一览表 详细的介绍了各控制属性的详细中文介绍 C#控件及常用设计整理 1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程 ...

  4. Tomcat源码

    1.Connector   Container:Engine,Host,Context,Wrapper(责任链的设计模式)   Valve: Tomcat 中一个最容易发现的设计模式就是责任链模式,这 ...

  5. configparser模块来生成和修改配置文件

    1. 安装configparser模块 pip3 install configparser ##python2.7模块名为ConfigParser 2. 创建配置文件 import configpar ...

  6. [User Defaults] Failed to read values in CFPrefsPlistSource (iOS 10)

    最近遇到一个bug,偶发,后来发现概率还挺高(10%). NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; ...

  7. servlet的总结

    tomcat在启动的时候 加载webapp下面的web.xml,加载里面定义的servlet. web.xml文件有两部分:servlet类定义和servlet映射定义每个被载入的servlet类都有 ...

  8. AVAudioSession(4):响应音频中断事件

    本文转自:AVAudioSession(4):响应音频中断事件 | www.samirchen.com 本文内容主要来源于 Responding to Interruptions. 当一个音频中断到来 ...

  9. 《Java入门第三季》第一章 异常与异常处理

    Java异常简介 1.Java异常的体系结构.万恶之源Throwable以及它的两个大儿子Mr.Error(程序终结者)和Mr.Exception(有大量儿子,包括不受查的RuntimeExcepti ...

  10. windows 下获取父进程pid

    DWORD GetParentProcessID(DWORD dwProcessId) { LONG status; DWORD dwParentPID = (DWORD)-1; HANDLE hPr ...