iT邦幫忙

2022 iThome 鐵人賽

DAY 21
0

給定一些線段,求這些線段所覆蓋的長度,注意,重疊的部分只能算一次。

輸入說明 :
第一列有一個正整數 n:
代表共有 n 組測試案例。

接下來每一組測試案例的第一列是一個整數 m
表示此測試案例有m個線段,

接著的m列每一列是一個線段的兩端點,

每一個端點是一個整數介於0~60000之間,
端點之間以一個空格區隔,線段個數不超過 5000。

起始端點小的先輸入。
此題不使用陣列。

輸出說明 :
針對每一組測試案例,輸出其覆蓋的長度,每組測試案例輸出一列。
不合法的輸入則輸出E

Input:
2 (共有2組次是案例)
2 (此組測試案例有2個線段)
0 1
2 3
3 (此組測試案例有3個線段)
0 20
10 30
40 50

Output:
2
40

Input:
3
3
10 111
150 3450
160 180
2
100 180
150 3333
1
150 150

Output:
3401
3233
0

Input:
1
2
150 320
160 190

Output:
170

#include <stdio.h>
int lineadd(int x1,int y1,int x2,int y2,int z,int control){
    if((x2>y2|| x1>y1) && (x1>=x2||x1>=y2)){
        return 100;
    }
    if(control==0){
        z=y1-x1;
    }
    if(y1>=x2&&y1<y2){
        z=z+y2-y1;
    }
    else if(y1<x2&&y1<y2){
        z=z+y2-x2;
    }
return z;
}
int main(){
    int n,m,z=0,control=0,error=1,z1=0;
    int x1=0,y1=0,x2=0,y2=0;
    int i=0,j=0,k;
    int a[300];
    scanf("%d",&n);
    k=n;
    if(n>0){
    for(i=n;i>0;i--){
        scanf("%d",&m);

            if( m<=5000 && m>0){
            scanf("%d %d",&x1,&y1);
              if(x1>=0 && x1<=60000 && y1>=0 && y1<=60000){
                z1=y1-x1;
                for(j=m;j>1;j--){
                        scanf("%d %d",&x2,&y2);
                        if(x2>=0 && x2<=60000 && y2>=0 && y2<=60000){
                            if(lineadd(x1,y1,x2,y2,z,control)!=100 && error){
                                z=lineadd(x1,y1,x2,y2,z,control);
                            }
                            else{
                                //printf("E\n");
                                //j=0;
                                error=0;
                            }
                            control=1;
                            x1=x2;
                            y1=y2;
                        }
                        else{
                            //printf("E\n");
                            //j=0;
                            error=0;
                        }

                }

                control=0;
                if(m==1){
                    printf("%d\n",z1);
                }
                else if(error==1){
                    printf("%d\n",z);
                }
                else{
                    printf("E\n");
                }
                z=0;
                error=1;
              }
              else{
                  //printf("E");
                  //j=0;
                  error=0;
              }

                            }
            else{
                printf("E\n");
                //i=0;
            }

            }
    }
    else
        printf("E\n");


return 0;
}


上一篇
[Day20]數獨
下一篇
[Day22]找出規律
系列文
環島C一下自己的人生24
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言