usaco5.5-Picture
离散化计算重叠矩形的周长。
称平行于x轴的边为横边,我们以横边为例,某一矩形中y坐标比较小的横边我们称为始边,另一边我们称为终边。用一条扫描线从下往上扫描,当扫到一条始边的时候,如果这条始边的正下方出现过k条始边和k条终边,那么这条始边肯定是没被覆盖住的,统计结果;当扫到一条终边的时候,如果这条始边的正下方出现过k条始边和k-1条终边,同理,统计结果。
注意扫描到的边要拆成单位长度的小边分别分析。
Executing...
Test 1: TEST OK [0.005 secs, 4156 KB]
Test 2: TEST OK [0.008 secs, 4156 KB]
Test 3: TEST OK [0.016 secs, 4156 KB]
Test 4: TEST OK [0.008 secs, 4156 KB]
Test 5: TEST OK [0.016 secs, 4156 KB]
Test 6: TEST OK [0.008 secs, 4156 KB]
Test 7: TEST OK [0.043 secs, 4156 KB]
Test 8: TEST OK [0.014 secs, 4156 KB]
Test 9: TEST OK [0.019 secs, 4156 KB]
Test 10: TEST OK [0.008 secs, 4156 KB]
Test 11: TEST OK [0.103 secs, 4156 KB]
All tests OK.
Your program ('picture') produced all correct answers! This is your submission #4 for this problem. Congratulations!
#include <iostream>
#include <memory.h>
#include <stdio.h>
#include <algorithm>
using namespace std; class CEdge
{
public:
int y;
int x1,x2;
bool isBegin;
CEdge(int y0=,int x10=,int x20=,bool flag=false):y(y0),x1(x10),x2(x20),isBegin(flag){}
bool operator <(const CEdge &e2)const
{
return y<e2.y || y==e2.y && isBegin;
}
}; int cnt[]={};
int n; int solve(CEdge edges[])
{
int ans=;
memset(cnt,,sizeof cnt); sort(edges,edges+*n);
for(int i=;i<*n;i++)
{
CEdge e=edges[i];
for(int j=e.x1;j<e.x2;j++)
{
if(e.isBegin && cnt[j]== || !e.isBegin && cnt[j]==)
ans++; if(e.isBegin)
cnt[j]++;
else
cnt[j]--;
}
}
return ans;
} CEdge eh[],ev[]; int main()
{
freopen("picture.in","r",stdin);
freopen("picture.out","w",stdout);
cin>>n;
for(int i=;i<n;i++)
{
int x1,y1,x2,y2;
scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
x1+=;
x2+=;
y1+=;
y2+=; // 加入数组 横边
eh[*i]=CEdge(y1,x1,x2,true);
eh[*i+]=CEdge(y2,x1,x2,false);
// 加入数组 竖边
ev[*i]=CEdge(x1,y1,y2,true);
ev[*i+]=CEdge(x2,y1,y2,false);
} printf("%d\n",solve(eh)+solve(ev));
return ;
}
usaco5.5-Picture的更多相关文章
- P1856 [USACO5.5]矩形周长Picture
P1856 [USACO5.5]矩形周长Picture $len$ $sum$ $num$ $flag\_l$ $flage\_ ...
- 洛谷P1856 [USACO5.5]矩形周长Picture
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...
- [题解]P1856 [USACO5.5]矩形周长Picture
Loli 考试的题目之一 题目地址 \(N^2\)做法 #include <cstdio> #include <cstring> #define re register #de ...
- luogu1856 [USACO5.5]矩形周长Picture
看到一坨矩形就要想到扫描线.(poj atantis) 我们把横边竖边分开计算,因为横边竖边其实没有区别,以下论述全为考虑竖边的. 怎样统计一个竖边对答案的贡献呢?答:把这个竖边加入线段树,当前的总覆 ...
- luogu P1856 [USACO5.5]矩形周长Picture 扫描线 + 线段树
Code: #include<bits/stdc++.h> #define maxn 200007 #define inf 100005 using namespace std; void ...
- P1856 [USACO5.5]矩形周长Picture[扫描线]
题目背景 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 题目描述 编写一个程序计算周长. 如图1所示7个矩形. ...
- [USACO5.5] 矩形周长Picture
https://www.luogu.org/problemnew/show/P1856 1.每个矩形由两条横向边和两条纵向边组成. 2.对于横向边,按纵坐标排序.设当前讨论的边为 A [s , t] ...
- 「USACO5.5」矩形周长Picture
题目描述 墙上贴着许多形状相同的海报.照片.它们的边都是水平和垂直的.每个矩形图片可能部分或全部的覆盖了其他图片.所有矩形合并后的边长称为周长. 编写一个程序计算周长. 如图1所示7个矩形. 如图2所 ...
- Luogu P1856 [USACO5.5]矩形周长Picture
线段树+扫描线 经典的扫描线问题 首先将一个矩形看作由竖着的两条边和横着的两条边构成 那分成两次考虑,一次考虑竖边,一次考虑横边 首先考虑横边 如图两个矩形,现将横边擦去,留下竖边,将平面划分成3个区 ...
- Luogu1856 [USACO5.5]矩形周长Picture (线段树扫描线)
对于横轴,加上与上一次扫描的差值:对于竖轴,加上高度差与区间内不相交线段\(*2\)的积: 难点在pushdown,注意维护覆盖关系.再就注意负数 #include <iostream> ...
随机推荐
- switchover和failover
Dataguard中primary和standby间的角色切换包括两种:1. switchoverprimary和standby互换角色,一般都是人为的有计划的,主要用于主机或数据库的升级,不会有数据 ...
- iOS UITableView 修改滚动条颜色 默认选中第一条
//隐藏 self.tableView.showsVerticalScrollIndicator = NO; //修改颜色 self.tableView.indicatorStyle=UIScroll ...
- 【调试技巧】FireFox作为移动端的设置
1.在地址栏输入“about:config”,按下回车进入设置菜单. 2.找到“general.useragent.override”,如果没有这一项,则点右键“新建”->“字符串”,输入这个字 ...
- ajax弹出窗口
提取自ZCMS的弹出框: 代替window.open.window.alert.window.confirm:提供良好的用户体验: 水晶质感,设计细腻,外观漂亮: 兼容ie6/7/8.firefox2 ...
- ORACLE CASE WHEN 及 SELECT CASE WHEN的使用方法
CASE 语句 CASE selector WHEN value1 THEN action1; WHEN value2 THEN action2; WHEN value3 THEN act ...
- C++经典题目:有n个人围成一圈,顺序排号,然后数数进行淘汰的解法和一些思考
问题描述: 有n个人围成一圈,顺序排号.从第一个人开始报数(1~3报数),凡报到3的人退出圈子,问最后留下的人原来排在第几号. 分析: 首先由用户输入人数n,然后对这n个人进行编号[因为如果不编号的话 ...
- Swift补基础之Selector、条件编译、编译标记、NSObject
在swift中使用条件编译比较直接 #if <condition> #elseif <condition> #else #endif 例如 :在debug模式和release模 ...
- qemu-img 快照的一些总结
qemu-img 快照的一些总结 http://www.openext.org/2014/06/qemu-img-snapshot-re http://blog.csdn.net/muge0913/a ...
- JavaScript中函数参数的按值传递与按引用传递(即按地址传递)
首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址 ...
- 用ueditor上传图片、文件等到七牛云存储
ueditor上传文件,是用数据流的形式上传的. 而七牛云存储官方文档中,只提供了文件路径上传的方式. 但是,仅仅是在官方文档中写了这一种方式. 事实上,利用VS的对象管理器,打开Qiniu的dll, ...