【JZOJ B组】【NOIP2013模拟】小喵喵的新家
Description
小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 。如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家。
小喵喵天生多才多艺,对多种乐器颇有研究。对于生活中常见的图形,她对圆形很感兴趣,因此小聪聪决定为她建一个圆形的新家。
我们设新家在一个平面直角坐标系上,其中新家的圆心为平面直角坐标系的原点。
小聪聪有一把神奇的剪刀,他定义了一个值m,以等分 [−pi,pi]弧度 (详见样例)。他还有一支神奇的画笔,将进行 n次“铺地毯”操作。对于第i 次“铺地毯”操作,他将设定一个半径ri,起始位置si,终止位置ti ,然后从圆心角pi*si/m到圆心角pi*ti/m这部分区域逆时针铺上一个扇形地毯。
小喵喵想到了一个奇怪的问题,她想知道有多大面积被至少铺过k次地毯。 这个问题一下就难倒了聪明的小聪聪。 现在小聪聪求助于你,你能帮他解决这个问题吗?为了方便表达 ,设答案的值为T,你只需要输出 T×2m/pi的值即可 。
Input
第一行是三个整数 n,m,k,含义 如题目描述中所述。
接下来n行, 每行描述一次铺地毯操作 。第i行有三个整数r,si,ti,含义 如 题目描述中所述。
Output
输出 一个整数 表示T×2m/pi的值。
Sample Input
3 8 2
1 -8 8
3 -7 3
5 -5 5
Sample Output
76
Data Constraint
Hint
思路
对于100%的做法:
扇形的面积:(所占的份数/2m)*πr^2
题目说:答案要乘一个2m/π
这样一相乘 化简:所占份数*r^2
就不用考虑精度问题啦!!!(出题人好评)
现在就要求出所有被覆盖大于等于k的面积,半径就是第k大的半径
那一个部分中有什么半径,我们怎么知道呢?
我们把圆拆成一条线段,端点就是圆圈上的各个等分点
把地毯的半径视为高,连接起始点和终点,如果有横跨线段中点的,把它看作两个部分
样例如下图:(用denghan大爷一张图)
设g[r]为半径为r的数量
我们可以从-m扫过去,碰到起始点的时候就把其对应的g[r]+1,碰到结束点的时候就把其对应的g[r]-1(也就类似与差分约束)
现在就要求第k大值
用线段树维护就好了
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int M=100000,maxn=M*5+77;
long long ans;
int n,m,k,cnt,p[maxn],to[maxn],head[maxn],w[maxn];
struct E
{int a,b,c;
}e[maxn];
void add(int x,int y,int r)
{e[++cnt].a=x; e[cnt].b=y; e[cnt].c=r;
}
int get_val(int x)
{return x<0?-x+M:x;
}
void insert(int l,int r,int d,int a,int b)
{if(l==r){p[d]+=b; return;}int mid=(l+r)/2;if (a<=mid) insert(l,mid,d*2,a,b); else insert(mid+1,r,d*2+1,a,b);p[d]=p[d*2]+p[d*2+1];
}
int find(int l,int r,int d,int k)
{if(l==r) return p[d]>=k?l:0;int mid=(l+r)>>1;if(p[d*2+1]>=k) return find(mid+1,r,d*2+1,k);else find(l,mid,d*2,k-p[d*2+1]);
}
int main()
{scanf("%d%d%d",&n,&m,&k);for(int i=1; i<=n; i++){int r,s,t;scanf("%d%d%d",&r,&s,&t);if(s==-m||s==m) add(-m,1,r),add(t,-1,r);else{if(t==-m) t=m;if(t>=s) add(s,1,r),add(t,-1,r);else add(s,1,r),add(m,-1,r),add(-m,1,r),add(t,-1,r);}}for(int i=1; i<=cnt; i++){int j=get_val(e[i].a);if (!head[j]) head[j]=i; else to[w[j]]=i;w[j]=i;}for(int i=-m; i<=m-1; i++){for(int j=head[get_val(i)]; j; j=to[j]) insert(1,M,1,e[j].c,e[j].b);long long t=find(1,M,1,k);ans+=t*t;}printf("%lld",ans);
}
【JZOJ B组】【NOIP2013模拟】小喵喵的新家相关推荐
- JZOJ 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
3518. [NOIP2013模拟11.6A组]进化序列(evolve) (File IO): input:evolve.in output:evolve.out Time Limits: 1000 ...
- JZOJ 3461. 【NOIP2013模拟联考5】小麦亩产一千八(kela)
3461. [NOIP2013模拟联考5]小麦亩产一千八(kela) (Standard IO) Time Limits: 1000 ms Memory Limits: 262144 KB Det ...
- jzoj 3461. 【NOIP2013模拟联考5】小麦亩产一千八(math)
3461. [NOIP2013模拟联考5]小麦亩产一千八 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hen ...
- JZOJ 3388. 【NOIP2013模拟】绿豆蛙的归宿
3388. [NOIP2013模拟]绿豆蛙的归宿 (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Detailed Limi ...
- jzoj. 3518. 【NOIP2013模拟11.6A组】进化序列(evolve)
Description Abathur采集了一系列Primal Zerg 的基因样本,这些基因构成了一个完整的进化链.为了方便,我们用A0,A1-An-1 这n 个正整数描述它们. 一个基因Ax 可以 ...
- [jzoj 3518] 【NOIP2013模拟11.6A组】进化序列(evolve){二进制}
题目 Description Abathur采集了一系列Primal Zerg 的基因样本,这些基因构成了一个完整的进化链.为了方便,我们用A0,A1-An-1 这n 个正整数描述它们. 一个基因Ax ...
- JZOJ 3455. 【NOIP2013模拟联考3】库特的向量(code)
题目 Description 从前在一个美好的校园里,有一只(棵)可爱的弯枝理树.她内敛而羞涩,一副弱气的样子让人一看就想好好疼爱她.仅仅在她身边,就有许多女孩子想和她BH,比如铃,库特,等等.不过, ...
- [jzoj 3461]【NOIP2013模拟联考5】小麦亩产一千八 {Fibonacci数列}
题目 Description "有了金坷垃,肥料一袋能顶两袋撒,小麦亩产一千八,吸收两米下的氮磷钾--",话说HYSBZ(Hengyang School for Boys & ...
- JZOJ 3468. 【NOIP2013模拟联考7】OSU!(osu)
Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: 一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为一个长 ...
- JZOJ 3457. 【NOIP2013模拟联考3】沙耶的玩偶(doll)
题目 Description 在美鱼和理树后援团拯救世界的同时,外表柔弱的理树也开始坚强起来,思考着离开这个世界的办法.误打误撞地,她遇上了正在教室破坏课桌打开迷宫入口的沙耶.沙耶告诉理树,这个世界的 ...
最新文章
- linux mysql添加用户名和密码错误,linux下为mysql设置用户名和密码
- 澳门大学燕茹教授课题组招聘/招生启事
- python【数据结构与算法】Floyd算法模拟
- 人工智能-机器学习=深度学习-其他
- “脚踢各大Python Web框架”,Sanic真有这能耐么?
- 由partition看窗口函数
- 小程序 字号设置 slider滚动改变大小_SteerMouse for mac(鼠标设置工具) v5.4.3
- python环境快速安装opencv 离线版安装
- 问君能有几多愁,恰似不懂Linux SQL如何调优——聊聊SQL Server on Linux最佳实践
- QuantLib 101之Swap
- Dying In The Sun
- 关于对象的思考(二)
- Mysql索引查询失效的情况
- 如何使用清理垃圾软件优化苹果电脑
- 最新版云铺购ds网系统全开源可运营程序源码
- YOLO: 3 步实时目标检测安装运行教程 [你看那条狗,好像一条狗!]
- 【札记】二 先天八卦与后天八卦
- Contest3115 - 2021级新生个人训练赛第23场_问题 H: 家庭作业
- Android画一条虚线
- 2019/5/第二周
热门文章
- 生活中常见的电压值,你知道多少?
- 【笔记】input data to the valid range for imshow with RGB data [0..1] for floats or [0.255] for integers
- 老国企如何焕发新势能?致远互联“协同五环”锻造老而弥坚
- 大牛建议——C++学习建议
- ARP中使用driftnet工具捕获图片
- 面:常见面试题整理(操作系统)
- 三大方案提升企业安全人才能力 永信至诚将企业网络安全教育推向云端
- Historic Exhibition 贪心
- (48)STM32——图片显示实验
- 学了七年Android,连【架构师筑基必备技能】都不知道有什么