Adding New Machine ZOJ - 3540
https://vjudge.net/problem/ZOJ-3540
错误记录:
扫描线没有考虑到同一行的要删除在前,加入在后;由于用了特殊的方式所以想当然以为不需要考虑这个问题
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<vector>
- #include<set>
- using namespace std;
- #define fi first
- #define se second
- #define mp make_pair
- #define pb push_back
- typedef long long ll;
- typedef unsigned long long ull;
- typedef pair<int,int> pi;
- struct Q
- {
- ll x1,y1,x2,y2;
- }q[];
- ll w,h,n,m;
- struct Q2
- {
- ll x1,x2,y,type;
- }qt[];
- ll t1[];
- bool operator<(const Q2 &a,const Q2 &b)
- {
- return a.y<b.y||(a.y==b.y&&a.type<b.type);
- }
- ll qn,ta,ans;
- set<pi> s;
- set<pi>::iterator it;
- int main()
- {
- ll i,r,tx,ty;
- while(scanf("%lld%lld%lld%lld",&w,&h,&n,&m)==)
- {
- ans=;
- for(i=;i<=n;i++) scanf("%lld%lld%lld%lld",&q[i].x1,&q[i].y1,&q[i].x2,&q[i].y2);
- qn=;
- s.clear();s.insert(mp(-,));s.insert(mp(w+,w+));
- for(i=;i<=n;i++)
- {
- ++qn;qt[qn].x1=q[i].x1;qt[qn].x2=q[i].x2;qt[qn].y=q[i].y1;qt[qn].type=;
- ++qn;qt[qn].x1=q[i].x1;qt[qn].x2=q[i].x2;qt[qn].y=q[i].y2+;qt[qn].type=;
- }
- sort(qt+,qt+qn+);
- for(i=;i<=qn;i++) t1[i]=qt[i].y;
- t1[]=qn;
- t1[++t1[]]=;
- t1[++t1[]]=h+;
- sort(t1+,t1+t1[]+);t1[]=unique(t1+,t1+t1[]+)-t1-;
- r=;ta=max(w-m+,0ll);
- for(i=;i<t1[];i++)
- {
- while(r+<=qn&&qt[r+].y<=t1[i])
- {
- r++;
- if(qt[r].type==)
- {
- it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
- tx=it->first;ty=(--it)->second;
- ta-=max(tx-ty-m,0ll);
- ta+=max(qt[r].x1-ty-m,0ll);
- ta+=max(tx-qt[r].x2-m,0ll);
- s.insert(mp(qt[r].x1,qt[r].x2));
- }
- else
- {
- it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
- tx=(++it)->first;--it;ty=(--it)->second;
- ta-=max(qt[r].x1-ty-m,0ll);
- ta-=max(tx-qt[r].x2-m,0ll);
- ta+=max(tx-ty-m,0ll);
- s.erase(mp(qt[r].x1,qt[r].x2));
- }
- }
- ans+=ta*(t1[i+]-t1[i]);
- }
- qn=;
- s.clear();s.insert(mp(-,));s.insert(mp(h+,h+));
- for(i=;i<=n;i++)
- {
- ++qn;qt[qn].x1=q[i].y1;qt[qn].x2=q[i].y2;qt[qn].y=q[i].x1;qt[qn].type=;
- ++qn;qt[qn].x1=q[i].y1;qt[qn].x2=q[i].y2;qt[qn].y=q[i].x2+;qt[qn].type=;
- }
- sort(qt+,qt+qn+);
- for(i=;i<=qn;i++) t1[i]=qt[i].y;
- t1[]=qn;
- t1[++t1[]]=;
- t1[++t1[]]=w+;
- sort(t1+,t1+t1[]+);t1[]=unique(t1+,t1+t1[]+)-t1-;
- r=;ta=max(h-m+,0ll);
- for(i=;i<t1[];i++)
- {
- while(r+<=qn&&qt[r+].y<=t1[i])
- {
- r++;
- if(qt[r].type==)
- {
- it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
- tx=it->first;ty=(--it)->second;
- ta-=max(tx-ty-m,0ll);
- ta+=max(qt[r].x1-ty-m,0ll);
- ta+=max(tx-qt[r].x2-m,0ll);
- s.insert(mp(qt[r].x1,qt[r].x2));
- }
- else
- {
- it=s.lower_bound(mp(qt[r].x1,qt[r].x2));
- tx=(++it)->first;--it;ty=(--it)->second;
- ta-=max(qt[r].x1-ty-m,0ll);
- ta-=max(tx-qt[r].x2-m,0ll);
- ta+=max(tx-ty-m,0ll);
- s.erase(mp(qt[r].x1,qt[r].x2));
- }
- }
- ans+=ta*(t1[i+]-t1[i]);
- }
- if(m==) ans/=;
- printf("%lld\n",ans);
- }
- return ;
- }
Adding New Machine ZOJ - 3540的更多相关文章
- HDU 4052 Adding New Machine(矩形面积并)
Adding New Machine Problem Description Incredible Crazily Progressing Company (ICPC) suffered a lot ...
- UVA1492 - Adding New Machine(扫描线)
UVA1492 - Adding New Machine(扫描线) option=com_onlinejudge&Itemid=8&page=show_problem&cate ...
- HDU 4052 Adding New Machine (线段树+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4052 初始给你w*h的矩阵,给你n个矩形(互不相交),按这些矩形尺寸把初始的矩形扣掉,形成一个新的'矩 ...
- 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)
转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...
- .Uva&LA部分题目代码
1.LA 5694 Adding New Machine 关键词:数据结构,线段树,扫描线(FIFO) #include <algorithm> #include <cstdio&g ...
- hdu 4052 线段树扫描线、奇特处理
Adding New Machine Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- QEMU, a Fast and Portable Dynamic Translator-Fabrice Bellard-翻译
Abstract We present the internals of QEMU, a fast machine emulator using an original portable dynami ...
- HZNU Training 4 for Zhejiang Provincial Collegiate Programming Contest 2019
今日这场比赛我们准备的题比较全面,二分+数论+最短路+计算几何+dp+思维+签到题等.有较难的防AK题,也有简单的签到题.为大家准备了一份题解和AC代码. A - Meeting with Alien ...
- zoj 3805 Machine
Machine Time Limit: 2 Seconds Memory Limit: 65536 KB In a typical assembly line, machines are c ...
随机推荐
- Jquery-easyui的默认图标的使用,以及如何添加自己想要的图标
easyui的默认图标有以下这些: .icon-blank{ background:url('icons/blank.gif') no-repeat; } .icon-add{ background: ...
- H5新增表单属性
一.form属性 <form id="test"> <input type="text" placeholder="请输入合适的信息 ...
- 小程序登录方式切换 不做url跳转
var filegUP = require('../../utils/getUserPassword.js'); var filemd5 = require('../../utils/md5.min. ...
- STM32的低功耗设置
因为产品需求,系统功耗是一个很重要的考虑方面.好好看下STM32F103的低功耗问题,以便编写驱动. 1.STM32的电源 1.1 STM32电源框图 上面的电源中需要注意的是后备供电区域,这个部分由 ...
- node安装与升级
node安装与升级 1.安装 sudo apt-get install nodejs sudo apt-get install npm 2.升级 如果node不是最新的,node有一个模块叫n,是专门 ...
- JAVA MAIL基本功能
1. [代码][Java]代码package emailrobot; import java.io.*;import java.text.*;import java.util.*;import jav ...
- lovelygallery_popup(卡哇依相册)
/*************************** 相册 ***************************/LovelyGallery 功能特点:超过200个令人惊叹的3D&2D硬 ...
- Asp与Asp.Net
1.Asp是什么? ASP是动态服务器页面(Active Server Page)的英文缩写.是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单.方便的编程工具 ...
- .NET 的 WebSocket 开发包比较 【已翻译100%】--网址:http://www.oschina.net/translate/websocket-libraries-comparison-2
编者按 本文出现在第三方产品评论部分中.在这一部分的文章只提供给会员,不允许工具供应商用来以任何方式和形式来促销或宣传产品.请会员报告任何垃圾信息或广告. Web项目常常需要将数据尽可能快地推送给客户 ...
- 【系列】 2-SAT
bzoj 1997 Planar 题目大意: 给一个存在曼哈顿回路的无向图,求该图是否为平面图 思路: 先把曼哈顿回路提出来,则剩下的边的两个端点若有$ABAB$的形式则这两条边必定一个在环外一个在环 ...