2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest B - Bring Your Own Bombs 离散化+扫描线+计算期望
扫描线一边扫一边算期望,细节比较多。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define PII pair<int, int>
#define PLI pair<LL, int>
#define PLL pair<LL, LL>
#define ull unsigned long long
using namespace std; const int N = 4e5 + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; int n, m, tot, X[N], cntx, Y[N], cnty, zero[N], zero2[N], people, people2;
double val[N], val2[N], sum[N], fact[N], fact2[N], ret, ans; struct qus {
int y, x1, x2, op;
} a[N];
struct Point {
int x, y;
double p[];
} b[N]; struct Bit {
int a[N];
void modify(int x, int v) {
for(int i = x; i < N; i+=i&-i)
a[i] += v;
}
int sum(int x) {
int ans = ;
for(int i = x; i; i-=i&-i)
ans += a[i];
return ans;
}
} bit; vector<Point> point[N];
vector<PII> in[N], out[N]; inline void changed(int x, double p) {
if(zero[x] > ) return;
if(p < eps) fact[x] = val[x];
else fact[x] /= p;
}
inline void changem(int x, double p) {
fact[x] *= p;
}
inline void changed2(int y, double p) {
if(zero2[y] > ) return;
if(p < eps) fact2[y] = val2[y];
else fact2[y] /= p;
}
inline void changem2(int x, double p) {
fact2[x] *= p;
} int main() {
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++) {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
a[++tot] = qus{y1, x1, x2, };
a[++tot] = qus{y2, x1, x2, -};
X[++cntx] = x1; X[++cntx] = x2;
Y[++cnty] = y1; Y[++cnty] = y2;
}
for(int i = ; i <= m; i++) {
scanf("%d%d%lf%lf", &b[i].x, &b[i].y, &b[i].p[], &b[i].p[]);
b[i].p[]/=, b[i].p[] /= , b[i].p[] = - b[i].p[] - b[i].p[];
X[++cntx] = b[i].x; Y[++cnty] = b[i].y;
}
sort(X+, X++cntx); sort(Y+, Y++cnty);
cntx = unique(X+, X++cntx)-X-;
cnty = unique(Y+, Y++cnty)-Y-;
for(int i = ; i <= cntx; i++) val[i] = 1.0;
for(int i = ; i <= cnty; i++) val2[i] = 1.0;
for(int i = ; i <= tot; i++) {
a[i].y = lower_bound(Y+, Y++cnty, a[i].y)-Y;
a[i].x1 = lower_bound(X+, X++cntx, a[i].x1)-X;
a[i].x2 = lower_bound(X+, X++cntx, a[i].x2)-X;
if(a[i].op == ) in[a[i].y].push_back(mk(a[i].x1, a[i].x2));
else out[a[i].y].push_back(mk(a[i].x1, a[i].x2));
}
for(int i = ; i <= m; i++) {
b[i].x = lower_bound(X+, X++cntx, b[i].x)-X;
b[i].y = lower_bound(Y+, Y++cnty, b[i].y)-Y;
if(-b[i].p[] > eps) val[b[i].x] *= (-b[i].p[]);
else zero[b[i].x]++;
if(-b[i].p[] > eps) val2[b[i].y] *= (-b[i].p[]);
else zero2[b[i].y]++;
point[b[i].y].push_back(b[i]);
} for(int i = ; i <= cntx; i++) {
if(zero[i]) fact[i] = ;
else fact[i] = val[i];
sum[i] = sum[i-] + fact[i];
}
for(int i = ; i <= cnty; i++) {
if(zero2[i]) fact2[i] = ;
else fact2[i] = val2[i];
}
for(int i = ; i <= cnty; i++) {
ans += (Y[i]-Y[i-]-)*(people-ret);
for(PII sgm : in[i]) {
people += sgm.se-sgm.fi+;
people2 += X[sgm.se]-X[sgm.fi]+-(sgm.se-sgm.fi+);
ret += sum[sgm.se] - sum[sgm.fi-];
bit.modify(sgm.fi, );
bit.modify(sgm.se+, -);
}
double res1 = ret, res2 = ;
for(Point p : point[i]) {
if(!bit.sum(p.x)) continue;
res1 -= fact[p.x];
changed(p.x, -p.p[]);
changed2(p.y, -p.p[]);
res2 += fact[p.x]*fact2[p.y]*p.p[];
changem(p.x, -p.p[]);
changem2(p.y, -p.p[]);
}
ans += people - (fact2[i]*res1 + res2) + people2*(-fact2[i]);
for(PII sgm : out[i]) {
people -= sgm.se-sgm.fi+;
people2 -= X[sgm.se]-X[sgm.fi]+-(sgm.se-sgm.fi+);
ret -= sum[sgm.se] - sum[sgm.fi-];
bit.modify(sgm.fi, -);
bit.modify(sgm.se+, );
}
}
printf("%.12f\n", ans);
return ;
} /*
*/
2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest B - Bring Your Own Bombs 离散化+扫描线+计算期望的更多相关文章
- 2018-2019 ICPC, NEERC, Southern Subregional Contest
目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...
- Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest
2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...
- 2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic(Kruskal思想)
2016 NEERC, Moscow Subregional Contest K. Knights of the Old Republic 题意:有一张图,第i个点被占领需要ai个兵,而每个兵传送至该 ...
- 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror) Solution
从这里开始 题目列表 瞎扯 Problem A Find a Number Problem B Berkomnadzor Problem C Cloud Computing Problem D Gar ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem D. Distance 迪杰斯特拉
Problem D. Distance 题目连接: http://codeforces.com/gym/100714 Description In a large city a cellular ne ...
- 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem C. Contest 水题
Problem C. Contest 题目连接: http://codeforces.com/gym/100714 Description The second round of the annual ...
- 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest Problem L. Lazy Coordinator
题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229511 时间限制:1s 空间限制:512MB 题目大意: 给定一个n 随后跟着2n行输入 ...
- Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结
第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做傻子题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...
- codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解
秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...
随机推荐
- 科学计算三维可视化---TVTK管线与数据加载(数据集)
一:数据集 三维可视化的第一步是选用合适的数据结构来表示数据,TVTK提供了多种表示不同种类数据的数据集 (一)数据集--ImageData >>> from tvtk.api im ...
- 海思Hi3518A 海思Hi3518C 海思Hi3518E 这几个芯片都有什么区别么
在3518A.3518C的基础上深化完善,推出了Hi3518E.作为新一代IP民用摄像机SoC,Hi3518E集成新一代ISP,优化了编码前图像处理算法,采用新一代H.264编码器.同时采用业内领先的 ...
- 项目Header组件的开发注意事项
npm install stylus --save npm install stylus-loader --save 移动端一般采用rem布局方式 Header组件里iconfont的使用和代码优化: ...
- java多线程获取返回结果--Callable和Future示例
package test.guyezhai.thread; import java.util.ArrayList; import java.util.Date; import java.util.Li ...
- [转]extern与头文件(*.h)的区别和联系
用#include可以包含其他头文件中变量.函数的声明,为什么还要extern关键字? 如果我想引用一个全局变量或函数a,我只要直接在源文件中包含#include<xxx.h> (xxx. ...
- 对于最近一星期jsp培训有感
这周上课是jsp的培训,找的是外面的一个培训机构的讲师,人挺好的,讲的也不错,不过交给我们的任务是一星期做出一个网站模型——新闻发布系统. 由于我们组本科学计算机的人实在太少了,所以这个重担落在我的身 ...
- C++ 和 MFC的学习
1. 在Windows应用程序设计中,既可以使用个C的基本数据类型,也可以使用Windows自定义的数据类型.但要注意,凡是Windows自定义的关键字都要大写. 2. 什么是句柄? 在Windows ...
- AndroidManifest.xml权限设置
访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permi ...
- Java不为人知的小秘密
Java中的main方法必须有一个外壳类,而且必须是静态的! Java中的所有函数都属于某个类的方法,所以main方法也不例外,必须放在一个类中才能编译运行. 例如: public class tex ...
- python网络编程--进程池
一:进程池 进程池内部维护一个进程序列,当使用时,则去进程池中获取一个进程, 如果进程池序列中没有可供使用的进进程,那么程序就会等待,直到进程池中有可用进程为止. 进程池中有两个方法: apply a ...