bzoj4561: [JLoi2016]圆的异或并】的更多相关文章

BZOJ4561 JLoi2016 圆的异或并 Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑. Input 第一行包含一个正整数N,代表圆的个数.接下来N行,每行3个非负整数x,y,r,表示一个圆心在(x,y),半径为r的圆.保证|x|,|y|,≤10^8,r>0,N<=200000 Output 仅一行一个整数,表示所有圆的异或…
地址:http://www.lydsy.com/JudgeOnline/problem.php?id=4561 题目: 4561: [JLoi2016]圆的异或并 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 700  Solved: 275[Submit][Status][Discuss] Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面 积并.异或面积并为:当一片区域…
Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面 积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑. Input 第一行包含一个正整数N,代表圆的个数.接下来N行,每行3个非负整数x,y,r,表示一个圆心在(x,y),半径为r的 圆.保证|x|,|y|,≤10^8,r>0,N<=200000 Output 仅一行一个整数,表示所有圆的异或面积并除以圆周率Pi的结果. 用平衡树维护扫…
考虑一条扫描线从左到右扫过这些圆.观察某一时刻直线与这些圆的交点,可以发现构成一个类似括号序列的东西,括号的包含关系与圆的包含关系是相同的.并且当扫描线逐渐移动时,括号间的相对顺序不变.于是考虑用set维护这个括号序列,插入时统计被包含层数.这只需要查询后继括号,如果是右括号则被该括号包含,答案为该括号次数+1,否则处于同一层,答案与该括号相同. bzoj大概又出了一些奇怪的精度问题,用long double才过. #include<iostream> #include<cstdio&g…
考虑任何一条垂直于x轴的直线,由于圆不交,所以这条直线上的圆弧构成形似括号序列的样子,且直线移动时圆之间的相对位置不变. 将每个圆拆成两边,左端加右端删.每次加圆时考虑它外面最内层的括号属于谁.用set维护括号序列,每次从插入的位置往上找,如果第一个找到的是上括弧则说明被它包含,如果是下括弧说明和它并列.这样每个圆的符号就可以确定了. #include<set> #include<cmath> #include<cstdio> #include<algorithm…
因为本题保证两圆之间只有相包含或相离(不用担心两圆重合 因为我没有RE) 所以每个圆之间的相对位置是确定的  也就是可以按极角排序的, 所以可以按横坐标排序后 扫描同时用treap维护加圆删圆(即遇到圆的左边界加圆 遇到又边界删圆   treap中的节点是某个圆的上半部分 或某个圆的下半部分) 具体见其他人的博客   我只想说 我颓废两天.要来的数据全A交上去还是RE  的原因是   windows的rand是32767内的 而BZOJ是Linux也就是说 int x=rand()*rand()…
[BZOJ4561][JLoi2016]圆的异或并 Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑. Input 第一行包含一个正整数N,代表圆的个数.接下来N行,每行3个非负整数x,y,r,表示一个圆心在(x,y),半径为r的圆.保证|x|,|y|,≤10^8,r>0,N<=200000 Output 仅一行一个整数,表示所有圆的…
4561: [JLoi2016]圆的异或并 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 254  Solved: 118[Submit][Status][Discuss] Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑. Input 第一行包含一个正整数N,代表圆的个数.接下来N行,…
Description 在平面直角坐标系中给定N个圆.已知这些圆两两没有交点,即两圆的关系只存在相离和包含.求这些圆的异或面 积并.异或面积并为:当一片区域在奇数个圆内则计算其面积,当一片区域在偶数个圆内则不考虑. Solution 我们可以把异或当作容斥的一个过程....现在要确定每一个圆的系数. 由于不存在相交关系 , 圆与圆之间相对顺序是确定的 , 所以可以用 \(set\) 来维护相对顺序. 我们对 \(x\) 做扫描线来维护一个圆的插入和删除. 我们把一个圆拆成上下两个圆弧 , 新插入…
扫描线的应用. 扫描线就是用数据结构维护一个相对的顺序不变,带修改的东西. 通常只用于一次询问的情况. 抽象的看做一条垂直于x轴直线从左向右扫过去. 这道题目要求求出所有圆的异或并. 所以我们可以求出每一个圆的系数,然后乘上他们的面积. 由于不会出现相交的情况,所以圆弧的相对顺序是不变的. 所以我们用扫描线加入的时候,讨论一下上面的圆弧分别是上下半圆的情况. 然后比较容易的得出结论. 如果是上半圆,这个圆就属于它. 如果是下半弧,那么和它的包含性相同. 接下来找到它的父亲就可以了. 然后用set…