zoukankan      html  css  js  c++  java
  • [HAOI2014]贴海报

    题目描述

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

    张贴规则如下:

    electoral墙是一个长度为N个单位的长方形,每个单位记为一个格子;
    
    所有张贴的海报的高度必须与electoral墙的高度一致的;
    
    每张海报以“A B”表示,即从第A个格子到第B个格子张贴海报;
    
    后贴的海报可以覆盖前面已贴的海报或部分海报。
    

    现在请你判断,张贴完所有海报后,在electoral墙上还可以看见多少张海报。

    输入格式

    第一行: N M 分别表示electoral墙的长度和海报个数

    接下来M行: Ai Bi 表示每张海报张贴的位置
    输出格式

    输出贴完所有海报后,在electoral墙上还可以看见的海报数。

    不太敢相信这是一道绿题。。。

    各位大佬的题解都太正确了,我就给一篇最暴力的吧!

    1. 海报用k表示,每次新的一张则通过k++来区别。

    2. 在[a,b]的区间内,给每一个t[i]都赋值为新的k(原有值的覆盖掉)。

    3. 判断[1,n]是否全被覆盖。是则令w=0,否则w=1。(最后要减掉w)。

    4. 如果有不同的海报露出来(即g[i]有不同的值出现),sum++(计数)。

    5. sum-w即为答案。


    本以为是一道线段树,结果被骗了。


    #include<bits/stdc++.h>
    #define maxn 10000009
    using namespace std;
    long long int n,m,sum,w,k;
    int t[maxn],g[maxn];
    
    template<typename T>
    void read(T &x){
    	x=0;int f=1;char ch=getchar();
    	while(ch>'9'||ch<'0'){
    		if (ch=='-') f=-1;
    		ch=getchar();
    	}
    	while(ch>='0'&&ch<='9'){
    		x=x*10+ch-'0';
    		ch=getchar();
    	}
    	x*=f;
    }
    int main(){
    	read(n),read(m);
    	for (int i=1;i<=m;i++){
    		int a,b;
    		read(a),read(b);
    		k++;//更新k。
    		for (int j=a;j<=b;j++)
    			t[j]=k;//在[a,b]的区间内,给每一个t[i]都赋值为新的k(原有值的覆盖掉)。
    		
    	}
    	for (int i=1;i<=n;i++){
    		if(t[i]==0){
    			w=1;break;//判断[1,n]是否全被覆盖。是则令w=0,否则w=1。(最后要减掉w)。
    		}
    	}
    	for (int i=1;i<=n;i++){
    		if(g[t[i]]==0){
    			sum++;g[t[i]]=1;//如果有不同的海报露出来(即g[i]有不同的值出现),sum++(计数)。
    		}
    	}
    	cout<<sum-w;//sum-w即为答案。
    	return 0;
    }
    
    
    
  • 相关阅读:
    动物-昆虫:蠼螋
    动物-昆虫:蚰蜒
    动物-软体动物:蜒蚰
    动物-昆虫:蝼蛄
    动物-昆虫:地鳖
    动物:水蛭、蚂蟥
    动物:刺猬
    cmd 下命令
    storm-安装
    python学习之--安装IDE(eclipse+pydev)
  • 原文地址:https://www.cnblogs.com/zhangdading/p/11564797.html
Copyright © 2011-2022 走看看