zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    Python·安装扩展包的几种方法
    Arduino系列硬件资源介绍
    树莓派USB摄像头的使用
    树莓派frp服务器和客户端配置教程
    树莓派frp内网穿透
    用Windows远程桌面连接树莓派的方法
    控制窗体的位置和大小
    树霉派更换软件镜像源
    I2C的库函数应用示例
    I2C总线的Arduino库函数
  • 原文地址:https://www.cnblogs.com/ZhaoChongyan/p/11740448.html
Copyright © 2011-2022 走看看