1682. [HAOI2014]贴海报
1682. [HAOI2014]贴海报
★★☆ 输入文件:ha14d.in 输出文件:ha14d.out 简单对比
时间限制:1 s
内存限制:256 MB
【题目描述】
Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论。为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙。
张贴规则如下:
1.electoral墙是一个长度为N个单位的长方形,每个单位记为一个格子;
2.所有张贴的海报的高度必须与electoral墙的高度一致的;
3.每张海报以“A B”表示,即从第A个格子到第B个格子张贴海报;
4.后贴的海报可以覆盖前面已贴的海报或部分海报。
现在请你判断,张贴完所有海报后,在electoral墙上还可以看见多少张海报。
【输入格式】
第一行: N M 分别表示electoral墙的长度和海报个数
接下来M行: Ai Bi 表示每张海报张贴的位置
【输出格式】
输出贴完所有海报后,在electoral墙上还可以看见的海报数。
【样例输入】
100 5
1 4
2 6
8 10
3 4
7 10
【样例输出】
4
【提示】
【约束条件】
1 0<= N <= 10000000 1<=M<=1000 1<= Ai <= Bi <=10000000
所有的数据都是整数。数据之间有一个空格
上来看了一眼立马用10min打出了暴力,打完T3的暴力之后回来看了一下这个题感觉是线段树的裸体
然后用15min写出了线段树
但是!!!
线段树!!
居然!!
比!!
暴力!!
慢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
而且!!
还!!
爆内存!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这就比较尴尬了,望着对拍程序上每次都是暴力先跑完然后线段树等一秒再出结果的场景,我还能说什么、、
难道是因为我写的线段树太丑了???
=.=
暴力思路:模拟张贴每一个海报

1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 using namespace std;
6 const int MAXN=10000001;
7 int n,m,x,y;
8 int read(int & n)
9 {
10 char c='/';int x=0,flag=0;
11 while(c<'0'||c>'9')
12 {c=getchar();
13 if(c=='-')flag=1;}
14 while(c>='0'&&c<='9')
15 {x=x*10+c-48;c=getchar();}
16 if(flag)n=-x;
17 else n=x;
18 return n;
19 }
20 int a[MAXN];
21 int vis[MAXN];
22 int now=1;
23 int ans=0;
24 int main()
25 {
26 freopen("a.in","r",stdin);
27 freopen("b.out","w",stdout);
28 read(n);read(m);
29 for(int i=1;i<=m;i++)
30 {
31 read(x);read(y);
32 if(x>y)swap(x,y);
33 for(int j=x;j<=y;j++)
34 a[j]=i;
35 }
36 for(int i=1;i<=n;i++)
37 {
38 if(vis[a[i]]==0&&a[i]!=0)
39 {
40 ans++;
41 vis[a[i]]=1;
42 }
43 }
44 printf("%d",ans);
45 return 0;
46 }

正解:老师讲了个扫描线但是没听懂啊,,,,,so参考了题解的浮水法
首先我们读入每一个海报的l和r,
然后逆序扫描,默认ans为一,因为最后的一张一定能看见
对于每一个i一直向上枚举,就像浮水一样,如果经过不断的裁剪之后能够>n的话
ans++

1 #include<iostream>
2 #include<cstdio>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 using namespace std;
7 const int MAXN=1001;
8 int n,m,ans=1;
9 int vis[MAXN];
10 struct node
11 {
12 int l;
13 int r;
14 int id;
15 }a[MAXN];
16 int read(int & n)
17 {
18 char c='/';int flag=0,x=0;
19 while(c<'0'||c>'9')
20 {if(c=='-')flag=1;
21 c=getchar();}
22 while(c>='0'&&c<='9')
23 {x=x*10+(c-48);
24 c=getchar();}
25 if(flag)n=-x;
26 else n=x;
27 }
28 void water(int ll,int rr,int now,int pos)
29 {
30 if(vis[pos])
31 return ;
32 while(now<=m&&(rr<=a[now].l||ll>=a[now].r))
33 now++;
34 if(now>m)
35 {
36 vis[pos]=1;
37 ans++;
38 return ;
39 }
40 if(ll<a[now].l&&rr>a[now].l)
41 water(ll,a[now].l,now+1,pos);
42 if(rr>a[now].r&&ll<a[now].r)
43 water(a[now].r,rr,now+1,pos);
44
45 }
46 int main()
47 {
48 freopen("ha14d.in","r",stdin);
49 freopen("ha14d.out","w",stdout);
50 read(n);read(m);
51 for(int i=1;i<=m;i++)
52 {
53 read(a[i].l);
54 read(a[i].r);
55 a[i].r=a[i].r+1;
56 a[i].id=i;
57 }
58 for(int i=m-1;i>=1;i--)
59 {
60 water(a[i].l,a[i].r,i+1,i);
61 }
62 printf("%d",ans);
63 return 0;
64 }

1682. [HAOI2014]贴海报的更多相关文章
- cogs1682. [HAOI2014]贴海报 x
1682. [HAOI2014]贴海报 ★★☆ 输入文件:ha14d.in 输出文件:ha14d.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] Bytetow ...
- 【题解】Luogu P3740 [HAOI2014]贴海报
woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...
- Luogu P3740 [HAOI2014]贴海报_线段树
线段树版的海报 实际上这个与普通的线段树相差不大,只是貌似数据太水,暴力都可以过啊 本来以为要离散的,结果没打就A了 #include<iostream> #include<cstd ...
- 洛谷P3740 【[HAOI2014]贴海报】
(呃...本蒟蒻的第一篇题解qwq)..不废话了讲正题..思路来源于铺地毯(-->传送门)..先算出每一个格子上覆盖的海报并把可见的海报做标记然后算出有多少海报是可见的..但是作为省选题怎么可能 ...
- BZOJ5168: [HAOI2014]贴海报 线段树
Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委 员 会为选民准备了一个张贴海报的electoral墙.张贴规则如下 ...
- 洛谷P3740 [HAOI2014]贴海报
题目描述 Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: electo ...
- 【线段树】【P3740】 [HAOI2014]贴海报
传送门 Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规 ...
- 洛谷 P3740 [HAOI2014]贴海报
题目描述 Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: electo ...
- [haoi2014]贴海报
Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙.张贴规则如下:1.electoral墙是 ...
随机推荐
- Ubuntu 16.04安装TortoiseSVN(基于CrossOver)
基于CrossOver的TortoiseSVN有如下缺点: 1.不能像Windows下实现右键菜单提交,但是可以通过TortoiseSVN实现迁出代码. 可以解决的问题: 1.可以通过Tortoise ...
- JAVA调用动态链接库(dll)
菜鸡爬坑 基础知识 因为某个东西的keygen我只会在win下生成!! 所以只能出此下策!!之前一直是android下用jni调用so文件,现在试下java在win平台下调用dll 首先还是 ...
- oracle索引简单使用
--查询表索引 select * from user_ind_columns where table_name = upper('HY_PROJECT') and column_name = uppe ...
- 001 Cisco router prewired
Cisco router 预配: Router>en Router#config t Enter configuration commands, one per line. End with ...
- hdu 4291 矩阵幂 循环节
http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109 ...
- Ubuntu下Zabbix安装及使用问题
1.configure: error: MySQL library not found MySQL library not found root@kallen:~# apt-get install l ...
- EC2的维护更新-总结篇及有效经验分享
2014年10月11日 号,我们对不到10%的EC2实例的完毕了重新启动.来预防不论什么与Xen安全通报(XSA-108)相关的安全风险. 日之前都有义务遵守相关问题的保密要求.直到它被向公众公布. ...
- [Canvas画图] 藏图阁(16) 人体穴位
本节目标: 趁着今天是愚人节.阿伟决定来重温一下学医的那段日子. 有那么一段时间, 阿伟对武侠小说和医学同一时候产生了浓厚的兴趣,当时最想学的就是葵花点穴手, 一阳指之类的点穴功夫.轻轻一点.就能把别 ...
- Wget下载多个链接
需要wget下载多个文件链接时,可以采用如下方法: 1. 将链接存入文件url.list中: 2. wget -bc -i url.list -o [log_file] -P [target_dir] ...
- c# DataGridView样式设置无效
对DataGridView中的某些行设置样式时,无效,最后发现,我是先设置完样式再进行展现的this.controls.Add,应该先展现完了,再设置样式.