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]贴海报的更多相关文章

  1. cogs1682. [HAOI2014]贴海报 x

    1682. [HAOI2014]贴海报 ★★☆   输入文件:ha14d.in   输出文件:ha14d.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] Bytetow ...

  2. 【题解】Luogu P3740 [HAOI2014]贴海报

    woc,今天已经是day -1了 再写一颗珂朵莉树来++rp吧 否则就要AFO了qaq 这有可能是我最后一篇题解/博客qaq 原题传送门:P3740 [HAOI2014]贴海报 考前刷水题到底是对还是 ...

  3. Luogu P3740 [HAOI2014]贴海报_线段树

    线段树版的海报 实际上这个与普通的线段树相差不大,只是貌似数据太水,暴力都可以过啊 本来以为要离散的,结果没打就A了 #include<iostream> #include<cstd ...

  4. 洛谷P3740 【[HAOI2014]贴海报】

    (呃...本蒟蒻的第一篇题解qwq)..不废话了讲正题..思路来源于铺地毯(-->传送门)..先算出每一个格子上覆盖的海报并把可见的海报做标记然后算出有多少海报是可见的..但是作为省选题怎么可能 ...

  5. BZOJ5168: [HAOI2014]贴海报 线段树

    Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委 员 会为选民准备了一个张贴海报的electoral墙.张贴规则如下 ...

  6. 洛谷P3740 [HAOI2014]贴海报

    题目描述 Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: electo ...

  7. 【线段树】【P3740】 [HAOI2014]贴海报

    传送门 Description Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规 ...

  8. 洛谷 P3740 [HAOI2014]贴海报

    题目描述 Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙. 张贴规则如下: electo ...

  9. [haoi2014]贴海报

    Bytetown城市要进行市长竞选,所有的选民可以畅所欲言地对竞选市长的候选人发表言论.为了统一管理,城市委员会为选民准备了一个张贴海报的electoral墙.张贴规则如下:1.electoral墙是 ...

随机推荐

  1. MongoDB小结07 - update【$pop】

    如果将数组看做队列,可以用$pop方法删除第一个或者最后一个元素 {$pop:{"key":-1}},{$pop:{"key":1}}

  2. [React] Prevent Unnecessary Rerenders of Compound Components using React Context

    Due to the way that React Context Providers work, our current implementation re-renders all our comp ...

  3. BNU 25593 Prime Time 记忆化dp

    题目链接:点击打开链接 题意: 一个游戏由3个人轮流玩 每局游戏由当中一名玩家选择一个数字作为開始 目的:获得最小的得分 对于当前玩家 O .面对 u 这个数字 则他的操作有: 1. 计分 u +1 ...

  4. hadoop(九) - hbase shell命令及Java接口

    一. shell命令 1. 进入hbase命令行  ./hbase shell 2. 显示hbase中的表  list 3. 创建user表,包括info.data两个列族 create 'user' ...

  5. vue全局注册与局部注册的写法

    vue全局注册是每个实例化的vue都可以使用,而局部则是实例化注册的那个可以用.举个例子,看看写法: <div id="app"> <p>页面载入时,inp ...

  6. MariaDB ----单表查询

    1>按一定条件查询某字段的数据 (where) ; ( 查询 id > 的数据) #补充: ; 注意“ select * from  students1:  (此命令需谨慎使用, 数据量大 ...

  7. php生成二维码2

    <?php include "phpqrcode.php"; $value = "http://huizhongda.taobao.com/"; $err ...

  8. 使用heartbeat+monit实现主备双热备份系统

    一.使用背景 项目须要实现主备双热自己主动切换的功能,保证系统7*24小时不间断执行.现已有两台双网卡的IBM的server,为了不再添加成本採购独立外部存储设备和双机热备软件.採用了linux下开源 ...

  9. ubuntu下apache+mysql+php+mysql等之webserver搭建

    相信非常多人跟我一样,想搭建一个自己的webserver.网上资料非常多.可是因为版本号的区别,总是存在依照一个教程来做无法全然实现的问题.近期我也折腾了好几天,google不能用,仅仅能百度,真想说 ...

  10. Ajax 之 DWR

    DWR是开源框架,类似于hibernate.借助于DWR,开发人员无需具备专业的JavaScript知识就可以轻松实现Ajax,是Ajax更平民化. 添加jar包   dwr.jar   common ...