扫描线一边扫一边算期望,细节比较多。

#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 离散化+扫描线+计算期望的更多相关文章

  1. 2018-2019 ICPC, NEERC, Southern Subregional Contest

    目录 2018-2019 ICPC, NEERC, Southern Subregional Contest (Codeforces 1070) A.Find a Number(BFS) C.Clou ...

  2. Codeforces 2018-2019 ICPC, NEERC, Southern Subregional Contest

    2018-2019 ICPC, NEERC, Southern Subregional Contest 闲谈: 被操哥和男神带飞的一场ACM,第一把做了这么多题,荣幸成为7题队,虽然比赛的时候频频出锅 ...

  3. 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个兵,而每个兵传送至该 ...

  4. 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 ...

  5. 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 ...

  6. 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 ...

  7. 2016-2017 ACM-ICPC, NEERC, Moscow Subregional Contest Problem L. Lazy Coordinator

    题目来源:http://codeforces.com/group/aUVPeyEnI2/contest/229511 时间限制:1s 空间限制:512MB 题目大意: 给定一个n 随后跟着2n行输入 ...

  8. Codeforces1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)总结

    第一次打ACM比赛,和yyf两个人一起搞事情 感觉被两个学长队暴打的好惨啊 然后我一直做傻子题,yyf一直在切神仙题 然后放一波题解(部分) A. Find a Number LINK 题目大意 给你 ...

  9. codeforce1070 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred) 题解

    秉承ACM团队合作的思想懒,这篇blog只有部分题解,剩余的请前往星感大神Star_Feel的blog食用(表示男神汉克斯更懒不屑于写我们分别代写了下...) C. Cloud Computing 扫 ...

随机推荐

  1. Jenkins + jmeter + ant + git 自动化集成

     背景: 目前测试组项目多,手头任务紧,且回归测试任务量较大,经过组内讨论采用相对快速高效的方式(自动化接口测试类型),在迭代任务中把主要精力集中在新需求测试:而回归测试时,主要采用自动化测试,提高测 ...

  2. angularJS 事件广播与接收

    发送消息: $scope.$emit(name, data) 或者 $scope.$broadcast(name, data); 接收消息: $scope.on(name,function(event ...

  3. PHP 神盾解密工具

    前两天分析了神盾的解密过程所用到的知识点,昨晚我把工具整理了下,顺便用神盾加密了.这都是昨天说好的,下面看下调用方法吧. 先下载 decryption.zip然后解压放到一个文件夹里,把你要解密的文件 ...

  4. 20145209 2016-2017-2 《Java程序设计》第7周学习总结

    20145209 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 read()每次读入一个字节. eg:short2个字节,2=0x0201,读入后要0x & ...

  5. 基本控件文档-UIButton属性

    CHENYILONG Blog 基本控件文档-UIButton属性 Fullscreen UIButton属性技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博ht ...

  6. Happy Matt Friends(HDU5119 + dp)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5119 题目: 题意: 求选择任意个数,使其异或和大于等于m的方案数. 思路: 每个数有选和不选两种方 ...

  7. Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

    问题: 当我们打开数据库,即use dbname时,要预读数据库信息,当使用-A参数时,就不预读数据库信息. 解决方法:mysql -hhostname -uusername -ppassword - ...

  8. 49、多线程创建的三种方式之继承Thread类

    继承Thread类创建线程 在java里面,开发者可以创建线程,这样在程序执行过程中,如果CPU空闲了,就会执行线程中的内容. 使用Thread创建线程的步骤: 1.自定义一个类,继承java.lan ...

  9. 【黑客免杀攻防】读书笔记17 - Rootkit基础

    1.构建Rootkit基础环境 1.1.构建开发环境 VS2012+WDK8 1.2.构建基于VS2012的调试环境 将目标机.调试机配置在同一个工作组内 sVS2012配置->DRIVER-& ...

  10. WindowsServer2003双网卡配置

    今天突然被问起,找资料10+分钟才找到记录,因此再次记录下: route -p delete 0.0.0.0 route -p add 0.0.0.0 mask 0.0.0.0 58.240.115. ...