• Problem: [Usaco2015 Dec]Fence Painting


    Problem: [Usaco2015 Dec]Fence Painting

    Time Limit: 1 Sec Memory Limit: 128 MB

    Description

    农夫约翰决定了近日将重新油漆略显破旧的围栏,而可爱的奶牛贝茜也主动提出要帮助他。可是,虽然贝茜工作地
    十分卖力,可她误解了约翰农夫给出的指示。我们现在假设围栏是一条数轴,约翰农夫自己油漆x=a到x=b这之间的
    区域,举个例子,如果a=3及b=5,那么约翰农夫油漆的长度就是2。奶牛贝茜没有理解好他的话,油漆了x=c到x=d
    这之间的区域,而这一区域很可能就与约翰农夫油漆的区域重叠了。现在请你算出被漆过的围栏的长度。

    Input

    输入的第一行包含整数a和b,用空格分隔(a<b)
    输入的第二行包含整数c和d,用空格分隔(c<d)
    数值a,b,c和d都在区间0…100

    Output

    请算出被漆过的围栏的长度。

    Sample Input

    7 10
    4 8

    Sample Output

    6
    HINT
    贝茜和约翰刷过的区间为[4,10]长度为6

    方法一
    判断各种情况,一个一个处理
    空间复杂度和时间复杂度都较小,但难以判断各种情况,易出错
    代码如下

    #include<bits/stdc++.h>
    using namespace std;
    int main(){
        int a,b,c,d;
        cin>>a>>b>>c>>d;
        if(a>=d||b<=c){
            cout<<b-a+d-c;
        }
        else if(c>=a&&d<=b){
            cout<<b-a;
        }
        else if(a>=c&&b<=d){
            cout<<d-c;
        }
        else if(d>=a&&c<=a){
            cout<<b-c;
        }
        else if(c<=b&&d>=b){
            cout<<d-a;
        }
        return 0;
    }
    

    方法二
    用一个bool数组当篱笆,true为涂过,false为没涂过
    简单易懂,但空间复杂度和时间复杂度都较大
    代码如下

    #include<stdio.h>
    int r[101];
    int main() {
    	int a,b,c,d,ans=0;
    	scanf("%d %d %d %d",&a,&b,&c,&d);
    	for(int i=a; i<b; i++)
    		r[i]=1;
    	for(int i=c; i<d; i++)
    		r[i]=1;
    	for(int i=0; i<=100; i++)
    		if(r[i])
    			ans++;
    	printf("%d",ans);
    }
    
  • 相关阅读:
    数据库访问性能优化(转)
    Mysql分表和分区的区别、分库分表介绍与区别
    怎样玩转千万级别的数据(表分区)
    关于Blocking IO,non-Blokcing IO,async IO的区别和理解
    spring security四种实现方式
    使用百度网盘+Git,把版本控制托管到云端,附精彩评论
    Linux下C/C++帮助手册安装方法
    GNU自动化工具使用全过程详解,以及在线手册
    autotools工具使用 good
    使用 GNU Libtool 创建库
  • 原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740448.html
Copyright © 2020-2023  润新知