Description

小x所在的世界正在经历一场在k个阵营之间的战争。每个阵营有若干个炮塔,每个炮塔由攻击系统和防御系统组成。第i个炮塔可以攻击到离它欧几里德距离小于等于ri 或者曼哈顿距离小于等于ai的炮塔,被攻击到的炮塔防御系统就会崩溃,同一联盟的炮塔不会被攻击到。每次会随机选择一个炮塔攻击它能打到的所有炮塔,问进行m轮后期望剩下多少个阵营,使得这些阵营拥有的炮塔的防御系统全部完好。防御系统崩溃的炮塔还是会被打到的。值得注意的是,如果一个联盟没有任何炮塔,那么不管怎样它都是完好的。

Input

  输入文件第一行有三个整数n、m、k,分别表示炮塔数目、攻击轮数以及联盟个数。 接下去n行每行有五个正整数xi、yi、ri、ai、pi,其中xi、yi表示炮塔坐标,p表示炮塔所属于阵营。

Output

  输出一行一个实数表示答案,你的输出与标准输出的误差在1e-3以内会被认为是正确的。

Sample Input

2 2 3
0 0 2 2 1
1 1 2 2 2

Sample Output

1.500
 
 
建完k-d树直接查找记得打标记就好了。
然而某邻接表写炸,RE了两发,最后#8还是不错的
从网上拷来3份标程(CA,Claris,鸟神),加上自己的AC代码共4份,随机造数据居然能出现4个不同的答案……(CA爷的代码最不和群
  1. #include<cmath>
  2. #include<bitset>
  3. #include<cstdio>
  4. #include<vector>
  5. #include<algorithm>
  6. #define ii inline int
  7. #define MN 36000
  8. #define MM 5000000
  9. using namespace std;
  10.  
  11. int n,m,f,ro=,num=,xx,X,o,la=,NO,l[MN+],k;
  12. double MMH=;
  13. char cs;
  14. ii read(){
  15. cs=getchar();xx=;f=;
  16. while(cs<''||cs>'') {if (cs=='-') f=-;cs=getchar();}
  17. while(cs>=''&&cs<='') xx=xx*+cs-,cs=getchar();
  18. return xx*f;
  19. }
  20. struct tr{
  21. int x,y,r,a;
  22. friend bool operator<(tr a,tr b){if (X) return a.y<b.y;else return a.x<b.x;}
  23. friend bool operator ==(tr a,tr b){return (a.x==b.x)&&(a.y==b.y);}
  24. }a[MN+],aw;
  25. struct tree{
  26. int xa,xi,ya,yi,l,r;
  27. }t[MN+];
  28. struct na{
  29. int y,ne;
  30. }b[MM];
  31. inline void in(int x,int y){
  32. b[++num].y=y;b[num].ne=l[x];l[x]=num;
  33. }
  34. bitset<MN+> G[MN+];
  35. vector <int> V[MN+];
  36. ii S(int x){return x*x;}
  37. ii A(int a,int b){return a>b?a:b;}
  38. ii I(int a,int b){return a<b?a:b;}
  39. ii B(int a){return a<?-a:a;}
  40. ii build(int l,int r,int now){
  41. X=now;
  42. int mid=(l+r)>>;
  43. nth_element(a+l,a+mid,a+r+);
  44. t[mid].xa=t[mid].xi=a[mid].x;
  45. t[mid].ya=t[mid].yi=a[mid].y;
  46. t[mid].l=t[mid].r=;
  47. if (l<mid) t[mid].l=build(l,mid-,now^),
  48. t[mid].xa=A(t[t[mid].l].xa,t[mid].xa),
  49. t[mid].xi=I(t[t[mid].l].xi,t[mid].xi),
  50. t[mid].ya=A(t[t[mid].l].ya,t[mid].ya),
  51. t[mid].yi=I(t[t[mid].l].yi,t[mid].yi);
  52. if (mid<r) t[mid].r=build(mid+,r,now^),
  53. t[mid].xa=A(t[t[mid].r].xa,t[mid].xa),
  54. t[mid].xi=I(t[t[mid].r].xi,t[mid].xi),
  55. t[mid].ya=A(t[t[mid].r].ya,t[mid].ya),
  56. t[mid].yi=I(t[t[mid].r].yi,t[mid].yi);
  57. return mid;
  58. }
  59. ii gnm(int j){return A(a[NO].x-t[j].xa,)+A(t[j].xi-a[NO].x,)+A(a[NO].y-t[j].ya,)+A(t[j].yi-a[NO].y,);}
  60. ii gnq(int j){return S(A(a[NO].x-t[j].xa,)+A(t[j].xi-a[NO].x,))+S(A(a[NO].y-t[j].ya,)+A(t[j].yi-a[NO].y,));}
  61. ii gmm(int j){return A(B(a[NO].x-t[j].xa),B(a[NO].x-t[j].xi))+A(B(a[NO].y-t[j].yi),B(a[NO].y-t[j].ya));}
  62. ii gmq(int j){return S(A(B(a[NO].x-t[j].xa),B(a[NO].x-t[j].xi)))+S(A(B(a[NO].y-t[j].yi),B(a[NO].y-t[j].ya)));}
  63. ii in(int x){
  64. if (gmq(x)<=a[NO].r) return ;
  65. if (gmm(x)<=a[NO].a) return ;
  66. if (gnq(x)<=a[NO].r) return ;
  67. if (gnm(x)<=a[NO].a) return ;
  68. return ;
  69. }
  70. ii ju(int x){
  71. if (S(a[x].x-a[NO].x)+S(a[x].y-a[NO].y)<=a[NO].r) return ;
  72. if (B(a[x].x-a[NO].x)+B(a[x].y-a[NO].y)<=a[NO].a) return ;
  73. return ;
  74. }
  75. ii que(int p){
  76. int u=in(p);
  77. if (u)
  78. if (u==) G[p][NO]=;else{
  79. if (ju(p)) in(p,NO);
  80. if (t[p].l) que(t[p].l);
  81. if (t[p].r) que(t[p].r);
  82. }
  83. }
  84. inline void dw(int p){
  85. if (t[p].l) G[t[p].l]|=G[p],dw(t[p].l);
  86. if (t[p].r) G[t[p].r]|=G[p],dw(t[p].r);
  87. for (register int i=l[p];i;i=b[i].ne) G[p][b[i].y]=;
  88. }
  89. int main(){
  90. register int i,j;
  91. n=read();m=read();k=read();
  92. for (i=;i<=n;i++) a[i].x=read(),a[i].y=read(),a[i].r=S(read()),a[i].a=read(),V[read()].push_back(i);
  93. ro=build(,n,);
  94. for (NO=;NO<=n;NO++) que(ro);
  95. dw(ro);
  96. for (i=;i<=k;i++){
  97. G[]=;
  98. for (j=;j<V[i].size();j++) G[]|=G[V[i][j]];
  99. for (j=;j<V[i].size();j++) G[][V[i][j]]=;
  100. MMH+=pow(1.0-(1.0*G[].count()/n),m);
  101. }
  102. printf("%.6lf\n",MMH);
  103. }

200724 kb 8588 ms C++/Edit 3446 B

bzoj:3616: War的更多相关文章

  1. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  2. 洛谷 P1197 BZOJ 1015 [JSOI2008]星球大战 (ZOJ 3261 Connections in Galaxy War)

    这两道题长得差不多,都有分裂集合的操作,都是先将所有操作离线,然后从最后一步开始倒着模拟,这样一来,分裂就变成合并,也就是从打击以后最终的零散状态,一步步合并,回到最开始所有星球都被连为一个整体的状态 ...

  3. 【BZOJ】【1863】【ZJOI2006】trouble 皇帝的烦恼

    二分+DP Orz KuribohG 神题啊= = 满足单调性是比较显然的…… 然而蒟蒻并不会判断能否满足……QwQ 神一样的DP姿势:f[i]表示第 i 个与第1个最多有多少个相同,g[i]表示最少 ...

  4. 【BZOJ】【1011】【HNOI2008】遥远的行星

    神奇的思路题QAQ 玛雅看到这题我就醉了,什么玩意……5%的误差?果断膜拜@ydc神犇的题解: 就是因为不清楚如何应用那个答案误差不超过5%啦. 从没见过这么诡异的题一下就懵了,问到了方法之后都还半信 ...

  5. 【BZOJ】【1640】【USACO2007 Nov】/【1692】【USACO2007 Dec】队列变换

    后缀数组/贪心 每次从等待序列的头或尾拿出一个放到答案序列的末尾,那么每次贪心比较头和尾的字典序大小即可…… TAT贪心很好想,但是我一开始没想到是可以直接比较字符串大小……而是一位一位判的,WA了… ...

  6. 【BZOJ】【1067】 【SCOI2007】降雨量

    思路题 玛雅,这分类讨论快讨论地疯了…… 从huzecong神的题解那里得到的灵感…… 首先考虑最好确定的情况:为true的时候,此时必须同时满足 1.x和y这两年的降雨量已知,且rain[x]< ...

  7. 【BZOJ】初级水题列表——献给那些想要进军BZOJ的OIers(自用,怕荒废了最后的六月考试月,刷刷水题,水水更健康)

    BZOJ初级水题列表——献给那些想要进军BZOJ的OIers 代码长度解释一切! 注:以下代码描述均为C++ RunID User Problem Result Memory Time Code_Le ...

  8. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  9. 用Maven部署war包到远程Tomcat服务器

    过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...

随机推荐

  1. ES6字符串方法

    ES6字符串提供三个函数确定一个字符串是否包含在另一个字符串中,分别是includes().startsWith().endsWith(),这三种方法都返回一个布尔值. includes()方法表示是 ...

  2. wincc flexable变量组态

    1.变量分类 2.变量组态练习 3.变量组态之前新建一个设备连接取名connect 3.tag1组态bool类型,双击变量弹出下面窗口,具体如下图所示connect表示外部变量 4.组态tag2 5. ...

  3. jQuery中$(function(){})与(function($){})(jQuery)、$(document).ready(function(){})等的区别详细讲解 ----转载

    1.(function($) {-})(jQuery); 1).原理: 这实际上是匿名函数,如下: function(arg){-} 这就定义了一个匿名函数,参数为arg 而调用函数时,是在函数后面写 ...

  4. 安装MongoDB步骤

    1.第一步是从官网下载匹配自己操作系统的安装文件或压缩文件: 2.随便找个文件夹先解压安装文件,然后在C盘根目录建立一个新文件夹命名为mongodb: 3.将打开刚刚安装的文件,将bin文件夹拷贝到C ...

  5. w 命令详解

    作用: 用于显示已经登录系统的用户列表, 并显示用户正在执行的指令. 执行这个命令可得知目前登入系统的用户有哪些人, 以及他们正在执行的程序.  单独执行w 命令会显示所有的用户, 您也可指定用户名称 ...

  6. Jmeter+Ant+Jenkins接口自动化测试(二)_测试方案设计及jmeter脚本开发

    前言 根据之前部署好的测试环境,进行接口自动化测试的方案设计及Jmeter脚本开发.测试方案设计过程中采用了数据分离和对象分离等思路,因此直接通过特定的测试用例文档来驱动整个自动化接口测试的执行,相关 ...

  7. .net中如何实现多线程

    l线程肯定也是要执行一段代码的.所以要产生一个线程,必须先为该线程写一个方法,这个方法中的代码就是该线程运行所要执行的代码.(找个人来做一件事情) l线程启动时,通过委托调用该方法. (委托的好处) ...

  8. centos7 系统安装问题汇总

    centos7 系统安装问题汇总: 1.使用u盘 安装centos7时,一直提示:'.../dev/root  does not exist,could not boot' 解决方法: 2.不能将原来 ...

  9. [编织消息框架][netty源码分析]13 ByteBuf 实现类CompositeByteBuf职责与实现

    public class CompositeByteBuf extends AbstractReferenceCountedByteBuf implements Iterable<ByteBuf ...

  10. Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python)

    Ubuntu16.04下编译安装OpenCV3.4.0(C++ & python) 前提是已经安装了python2,python3 1)安装各种依赖库 sudo apt-get update ...