题解报告——扇形面积并
题目传送门
题目描述
给定 n 个同心的扇形,求有多少面积,被至少k 个扇形所覆盖。
输入输出格式
输入格式:
第一行是三个整数 n,m,k。n 代表同心扇形个数,m代表将(−π ,π ]的角度
区间平均分成2m 份。
从第二行开始的 n 行,每行三个整数r,a1,a2。描述了一个圆心在原点的
扇形,半径为r,圆心角是从弧度
π∗a1/mπ*a1/mπ∗a1/m到π∗a2/mπ*a2/mπ∗a2/m(a1 不一定小于 a2)。
输出格式:
输出一个整数 ans ,π/2m∗ansπ/2m*ansπ/2m∗ans等于至少k 个扇形所覆盖的总面积。
数据保证答案在263−12^{63} - 1263−1范围内。
输入输出样例
3 8 2 1 -8 8 3 -7 3 5 -5 5
76
2 4 1 4 -4 2 1 -4 4
98
说明
1≤n≤10^5, 1≤m≤10^6,1≤k≤5000,1≤ri≤10^5,-m≤a1,a2≤m
【思路分析】
第一眼看到这个题以为是计算几何,一看通过数也不多,又是一道算几毒瘤题。。。但是我们仔细看看,发现数据都是整数,并且良心出题人将输出数据都为你做成了整数,感觉似乎就不像毒瘤算几了??!!再观察发现将圆划分成了相等的几块小区间,顿时感觉这道题变更成了区间问题了,我们尝试用线段树搞一搞??!!
对于查询被至少k个扇形覆盖的区间,等同于查询当前区间覆盖了扇形的第k大半径,既然有k的存在,那么数据结构无非就是平衡树和权值线段树,发现区间很多,平衡树不方便维护区间与区间之间的关系,那么我们考虑用权值线段树,区间k大问题??主席树板题??!!,其实不然,我们并不需要用主席树,只用开一棵权值线段树即可。
我们将扇形按起点排序,发现这就有点类似于扫描线,有下边界,有上边界,差分维护扇形起点终点即可。
然而我们发现这道题是有环的,即一个扇形的可能跨过我们的起点(而矩形面积并则不会),我们只需要将这样的扇形拆分成两块维护即可。。。AC了??!!
这次就真的应该可以A了!!!
【代码实现】
1 #include<cstdio> 2 #include<cctype> 3 #include<cstring> 4 #include<algorithm> 5 #include<vector> 6 using namespace std; 7 typedef long long ll; 8 void read(int &x) 9 { 10 int f;char ch; 11 while(!isdigit(ch=getchar())&&ch!='-'); ch=='-'?(f=-1,x=0):(f=1,x=ch-'0'); 12 while(isdigit(ch=getchar())) x=x*10+ch-'0';x=x*f; 13 } 14 const int N=1e5+5,M=1e6+5; 15 struct sd{ 16 int son[2],num; 17 }t[N<<1]; 18 int n,m,k,cnt,root,mx; 19 vector<int> cf[M<<1]; 20 void insert(int &v,int l,int r,int pos,int add) 21 { 22 if(!v) v=++cnt;t[v].num+=add; 23 if(l==r) return; 24 int mid=l+r>>1; 25 if(pos<=mid) insert(t[v].son[0],l,mid,pos,add); 26 else insert(t[v].son[1],mid+1,r,pos,add); 27 } 28 int ask(int v,int l,int r,int k) 29 { 30 if(l==r) return l; 31 int mid=l+r>>1,ls=t[v].son[0],rs=t[v].son[1]; 32 if(t[ls].num>=k) return ask(ls,l,mid,k); 33 else return ask(rs,mid+1,r,k-t[ls].num); 34 } 35 ll mul(ll a){return a*a;} 36 int main() 37 { 38 int l,r,ri; 39 read(n),read(m),read(k); 40 for(int i=1;i<=n;i++){ 41 read(ri),read(l),read(r); 42 l+=m+1,r+=m; 43 if(l==2*m+1) l=1;if(r==2*m) r=-1; 44 if(r==-1) cf[l].push_back(ri); 45 else if(l>r) cf[l].push_back(ri),cf[1].push_back(ri),cf[r+1].push_back(-ri); 46 else cf[l].push_back(ri),cf[r+1].push_back(-ri); 47 mx=max(ri,mx); 48 } 49 ll ans=0; 50 for(int i=1;i<=2*m;i++) 51 { 52 int ss=cf[i].size(); 53 for(int j=0;j<ss;j++) 54 if(cf[i][j]>0){ 55 int gg=cf[i][j]; 56 insert(root,1,mx,cf[i][j],1); 57 } 58 else insert(root,1,mx,-cf[i][j],-1); 59 if(t[root].num>=k) ans=ans+mul(1ll*ask(root,1,mx,t[root].num-k+1)); 60 } 61 printf("%lld",ans); 62 return 0; 63 }
转载于:https://www.cnblogs.com/genius777/p/9693669.html
题解报告——扇形面积并相关推荐
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- bzoj 4418: [Shoi2013]扇形面积并
题意:给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. 题解:很明显,最后结果肯定是几个扇形的面积的和.因为扇形面积=πR2×r−l2m=\pi R^2\times\frac{r-l}{2m} ...
- BZOJ4418: [Shoi2013]扇形面积并
BZOJ4418: [Shoi2013]扇形面积并 Description 给定N个同心的扇形,求有多少面积,被至少K个扇形所覆盖. Input 第一行是三个整数n,m,k.n代表同心扇形的个数,m用 ...
- CSP-2019day1题解报告
day1题解报告 题目 T1 T2 从链想起 转为正解 T3(摘自同级大佬xez) 题目 T1传送门 T2传送门 T3传送门 T1 乍一看,这道题做过,可以用对称性做,如果他的长度过了一半,就输出1, ...
- 圆周角、圆心角、弦、弦心距、弧长、扇形面积
连接圆上任意两点的线段叫做弦,经过圆心的弦叫做直径,直径是一个圆里最长的弦 顶点在圆周上,并且两边都和圆相交的角叫做圆周角 顶点在圆心上的角叫做圆心角 ∠ACB.∠CBA.∠CAB都是圆周角:∠AOB ...
- 爆炸的符卡洋洋洒洒题解报告
爆炸的符卡洋洋洒洒题解报告 标签:动态规划 题目链接 来源:牛客网 解题思路: 显而易见的背包问题 但再观察a,b的数据范围,开不了那么大的dp数组 这就启发我们去优化,由于题目要求魔力总耗的是k的倍 ...
- 2022杭电多校5题解报告(同步自语雀)
一.赛后总结 Wuhu~萌新又来啦~ 第一次在考场上写出NTT,虽然是比较裸,但感觉真的不错~ 开场看03,思路比较直,就是dijk,但跨层跳跃想了好久~最后想到了类似于B树或者B-树一类的层内链表, ...
- 2022杭电多校4题解报告(同步自语雀)
一.赛后总结 嘤嘤嘤,本人纯萌新,深夜反思自己到底有多菜~(:′⌒`) 前天没写出状压,再前面不会SAM和圆方树,再往前不会NTT和FFT,真的是个啥也不会的萌新呢. 这场主要的问题在于02的0环和1 ...
- 2022牛客多校2题解报告(同步自语雀)
一.赛后总结 总结就是缺乏清晰的大脑,当然一切的一切归因于实力不足. 开局看K,半个小时推出DP式子,交了就WA.差错没查出来,写了暴力对拍,就去看D了.后来拍了3个小时也没出问题...可能是数据生成 ...
最新文章
- Linux的sysctl 命令参数详解
- 编写彩色空间转换程序:YUVtoRGB
- 多线程小抄集(新编四)
- android异步更新UI
- 为何加入了AddType就无法启动Apache
- SQL Server:触发器详解
- 网际控制报文协议ICMP(Internet Control Message Protocol)(详解)
- linux重定向串口打印到telnet
- python基础学习--字符串和文件数据处理--附代码
- C++面试题,平时面试不可缺少的!
- tkinter python(图形开发界面) 转自:渔单渠
- 笨方法学python 习题42
- 永洪BI产品体验(一)数据源模块
- Python读取图像数据的常用方法
- 用Java写一个简易五子棋游戏
- 华为路由器子接口,vlan
- firefox调试html5程序,用 Firefox 开发者工具调试现代 Web 应用程序
- Linux下优秀的音频编辑软件
- 常用网络ip地址有哪些
- 漫画 | 连绿巨人都想要了解的Greenplum
热门文章
- 2021-09-16登录国际域名邮箱发邮件,如何在众多国际邮件地址中脱颖而出?
- 计算机控制器 硬件,计算机硬件系统—CPU(运算器和控制器)(一)
- 计算机使用别名的优点,香港空间购买,香港虚拟主机购买,香港免备案空间购买...
- R语言 - CRAN介绍
- 【转】gcc for Windows 开发环境介绍
- 淘宝商品详情页原型图
- 解决360浏览器或者IE等浏览器使用element 中的el-pagination分页点击有黑框问题
- 服务器系统如何校验md5值,怎么验证md5-NTP的MD5加密
- 文本框只允许输入数字
- Genymotion