Olddriver’s books
Olddriver 的书多的吓人,什么算法导论,组合数学英
文版(orz)。。。。。。他把 n 本书都放在身后的桌子上,
每本书有一定的面积,并且书可以覆盖,求 n 本书覆盖桌面
的面积
输入格式:
输入第一行为一个数 N,表示书的数量。下面 N 行,每行
四个整数,分别表示每个书的左下角和右上角的坐标。
输出格式:
输出只有一行,一个整数,表示图形的面积。
样例输入:
3
1 1 4 3
2 -1 3 2
4 0 5 2
样例输出:
10
数据范围:
对于 30%的数据:n<=100,坐标数值绝对值<=300
对于 100%的数据:n<=100,坐标数值绝对值<=10^8
【题解】
对于30%数据 打标记。
对于100%数据,注意到点最多有200个,对x,y坐标离散化,再打标记。
考试时没想到离散化(但数据范围是个很明显的暗示)。要试着接纳这道题的思维。
另外,离散化后要去重(然而我并不知道为什么)。
//这道题写什么扫描线
//离散化以后 直接暴力写不就好了么 O(n^3) 数据真是良心
#include<cstdio>
#include<algorithm>
using namespace std;
const int MAX=510;
struct books
{
int x1,y1,x2,y2;
}c[MAX];
bool b[MAX][MAX];//某一区域上是否有书覆盖 注意是区域而不是点
int x[MAX],y[MAX];
int rx[MAX],ry[MAX],tx,ty;
int n,cnt;
long long ans;
int gi()
{
int x=0,w=1;char ch=getchar();
while ((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
if (ch=='-') w=-1,ch=getchar();
while (ch>='0'&&ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*w;
}
//手写lower_bound
int pos_x(int x)
{
int l=1,r=tx;
while (l<r)
{
int mid=(l+r+1)>>1;
if (rx[mid]<=x) l=mid;
else r=mid-1;
}
return l;
}
//手写*2
int pos_y(int x)
{
int l=1,r=ty;
while (l<r)
{
int mid=(l+r+1)>>1;
if (ry[mid]<=x) l=mid;
else r=mid-1;
}
return l;
}
int main()
{
freopen("olddriver.in","r",stdin);
freopen("olddriver.out","w",stdout);
n=gi();
for (int i=1;i<=n;i++)
{
c[i].x1=gi();c[i].y1=gi();c[i].x2=gi();c[i].y2=gi();
x[++cnt]=c[i].x1;y[cnt]=c[i].y1;
x[++cnt]=c[i].x2;y[cnt]=c[i].y2;
}
sort(x+1,x+cnt+1);
sort(y+1,y+cnt+1);
for (int i=1;i<=cnt;i++)//去重
{
if (i==1||x[i]!=x[i-1]) rx[++tx]=x[i];
if (i==1||y[i]!=y[i-1]) ry[++ty]=y[i];
}
for (int i=1;i<=n;i++)//暴力枚举每一本书
{
int X1=pos_x(c[i].x1),X2=pos_x(c[i].x2);
int Y1=pos_y(c[i].y1),Y2=pos_y(c[i].y2);
for (int u=X1;u<X2;u++)
for (int v=Y1;v<Y2;v++)
b[u][v]=1;
}
for (int u=1;u<tx;u++)
for (int v=1;v<ty;v++)
if (b[u][v]) ans+=1ll*(rx[u+1]-rx[u])*(ry[v+1]-ry[v]);
printf("%lld",ans);
return 0;
}
Olddriver’s books的更多相关文章
- 7 Must Read Python Books
7 Must Read Python Books I started learning Python just two years ago. Coming from a C++ and Java ba ...
- TCP/IP BOOKS
TCP/IP Fundamentals for Microsoft Windows: Overview https://technet.microsoft.com/en-us/library/bb72 ...
- UVa 714 Copying Books(二分)
题目链接: 传送门 Copying Books Time Limit: 3000MS Memory Limit: 32768 KB Description Before the inventi ...
- LightOJ1283 Shelving Books(DP)
题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1283 Description You are a librarian ...
- 抄书 Copying Books UVa 714
Copying Books 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/B 题目: Descri ...
- [LintCode] Copy Books 复印书籍
Given an array A of integer with size of n( means n books and number of pages of each book) and k pe ...
- JSTL标签出错:<c:forEach var="book" items="${requestScope.books}" varStatus="status">
今天在运行书里的JSTL标签代码的时候出错,总结一下: 问题1.The JSP specification requires that an attribute name is preceded by ...
- A Year Of Books - 2016 Javaer书单
A Year Of Books - 2016 Javaer书单 (PS:欢迎留言推荐,很多来自白衣大哥的推荐) 1. OS & Networking <编码 : 隐匿在计算机软硬件背后的 ...
- A Personal Selection of Books on E lectromagnetics and Computational E lectromagnetics---David B. Davidson
链接. General Books on Electromagnetics When our department recently reviewed our junior-level text, w ...
随机推荐
- 05JavaScript中的事件处理
JavaScript中的事件处理 在JavaScript中,事件的发生主要是由窗口中内容变化.键盘和鼠标引起的.JavaScript在某些事件发生的时候,可以通过一些相应的事件处理器来捕获这些事件,并 ...
- 一个简单的java年龄计算器
制作一个如下图年龄计算器 根据题目,我做了一个由Calendar类以及年月日各相减得到的年龄,当然正确的方法不止一个,以下为我的源代码和结果截图: package com.Date; import j ...
- maven入门链接
http://www.cnblogs.com/now-fighting/p/4857625.html
- swift--字符串替换/过滤/切割
//替换 var ReplaceString = "http://www.aimonkey.cn"; var FilterReplace = ReplaceString.strin ...
- Qt 给QWidget添加工具栏
在Qt中,给主窗口(QMainWindow类)添加工具栏非常方便,直接使用addToolBar 即可,如下所示: fileToolBar = addToolBar(tr("&File ...
- 「 HDU P3336 」 Count the string
题目大意 给出一个长度为 $n$ 的字符串 $s$ 要求你求出 $s$ 的每一个前缀在 $s$ 中出现的次数之和.$n\le 200000$. 解题思路 暴力的对每一个前缀进行一次匹配,求出出现次数后 ...
- C/C++格式化输入,输出
C/C++格式化输入,输出 1.C语言 1. 语言函数 scanf(); printf(); sscanf() --> 不安全 sscanf_s() ---> 安全 sprintf() - ...
- 经典书籍---MySQL经典书籍下载
以下是一些经典的MySQL书籍电子版,括号内为提取码,若需自取. 欢迎阅读纸质版,尊重作者版权 高性能MySQL_中文版 [ hre3 ] 高性能MySQL_英文版[ m2xj ] MySQL技术内幕 ...
- LINUX-SWAP文件系统
mkswap /dev/hda3 创建一个swap文件系统 swapon /dev/hda3 启用一个新的swap文件系统 swapon /dev/hda2 /dev/hdb3 启用两个swap分区
- Mac 当xampp里mysql无法启动的解决办法
sudo /Applications/XAMPP/xamppfiles/bin/mysql.server start