BZOJ1182 Croatian2009 PLAHTE
来源:互联网 发布:网络教育大专报名 编辑:程序博客网 时间:2024/06/09 20:49
提示:
1. 可以尝试算算每个矩形覆盖面积的二次差分
详细题解在代码后:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <string>#include <vector>#include <deque>#include <stack>#include <queue>#include <set>#include <map>#include <algorithm>using namespace std;const int maxt = 1e6+1e2;typedef long long ll;int re() { int n = 0, ch = getchar(); bool flag = false; while(!isdigit(ch)) flag |= ch == '-', ch = getchar(); while(isdigit(ch)) n = n * 10 + ch - '0', ch = getchar(); return flag ? -n : n;}int x1 , y1 , x2 , y2;ll square(int t){ ll x = min(t , x2) - max(-t , x1)+1; ll y = min(t , y2) - max(-t , y1)+1; return (x<=0 || y<=0) ? 0 : x*y;}int a[maxt] , a2[maxt] , a4[maxt] , b[maxt];void modify(int t1 , int t2){ ll p0 = square(t1-1); ll p1 = square(t1 ); ll p2 = square(t1+1); a[t1] += p1-p0; a[t2] -= p1-p0; if(t2>t1+1) { ll v = p2-2*p1+p0; a[t2] -= v*(t2-t1); if(v == 2) a2[t1]++ , --a2[t2]; if(v == 4) a4[t1]++ , --a4[t2]; }}int main(int argc, char *argv[]) { int n; int q[20]; cin>>n; for(int i=1;i<=n;i++) { x1 = re(); y1 = re(); x2 = re(); y2 = re(); for(int d=-1 , cnt=0;d<=1;d++) { q[cnt++] = abs(x1+d); q[cnt++] = abs(x2+d); q[cnt++] = abs(y1+d); q[cnt++] = abs(y2+d); } sort(q, q+12); for(int i=1;i<12;i++) modify(q[i-1], q[i]); } cin>>n; int Mx = 0; for(int i=1;i<=n;i++) { x1 = re(); b[x1] = 1; Mx = max(Mx , x1); } ll res = 0 , add=0 , k2=0 , k4=0; for(int i=0;i<=Mx;i++) { res+= add+=a[i]; add+= 2*(k2+=a2[i])+4*(k4+=a4[i]); if(b[i]) printf("%lld\n" , res); } return 0;}
首先每个矩形的关键时刻最多12个 , 我并不确定哪些是真正的变化时刻 , 但不要紧 , 都记录一下不会错。
于是我把矩形分成若干时刻 , 在这些时刻之间矩形的面积增长是一定的。 于是查分记录一下就好。
0 0
- BZOJ1182 Croatian2009 PLAHTE
- [杂题 模拟] BZOJ 1182 [Croatian2009]PLAHTE
- BZOJ1180 [CROATIAN2009]OTOCI
- bzoj1180: [CROATIAN2009]OTOCI
- [BZOJ1180] [CROATIAN2009]OTOCI
- [BZOJ1180][CROATIAN2009]OTOCI
- 【bzoj1180】【CROATIAN2009】【OTOCI】【lct】
- bzoj 1180: [CROATIAN2009]OTOCI
- 【bzoj1180】[CROATIAN2009]OTOCI
- bzoj1180: [CROATIAN2009]OTOCI
- BZOJ 1180: [CROATIAN2009]OTOCI
- BZOJ1180: [CROATIAN2009]OTOCI
- [BZOJ1180][CROATIAN2009][LCT]OTOCI
- BZOJ 1180: [CROATIAN2009]OTOCI
- bzoj1180: [CROATIAN2009]OTOCI(lct)
- 【bzoj1180】[CROATIAN2009]OTOCI
- [BZOJ1180][CROATIAN2009]OTOCI(LCT)
- bzoj 1180 [CROATIAN2009]OTOCI - LCT
- vim配置文件(本人喜欢的风格)
- flashplayer 帧执行模型
- caffe for windows 实现cifar10图像训练生成caffemodel
- 机器学习--Haar特征
- redis安装部署
- BZOJ1182 Croatian2009 PLAHTE
- HDU 1520 Anniversary party (树形dp,dfs+dp)
- Mac 下利用 FileMerge 进行代码比较、合并
- 解释型语言和编译型语言的区别
- spring事物回滚
- JS对货币格式化
- Linux目录下/dev/shm的理解和使用
- 【Linux 优化篇】之 编译安装LAMP之安装Apache+php与管理
- 请求的链式处理——责任链模式