#46668: 為什麼79%


ck11300568@gl.ck.tp.edu.tw (ck11300568彭翊軒)

學校 : 不指定學校
編號 : 305237
來源 : [49.216.195.196]
最後登入時間 :
2025-09-27 15:05:48

本來程式碼:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int N,ans=0;
    cin>>N;
    int left[N],right[N];
    for(int i = 0;i<N;i++){
        cin>>left[i]>>right[i];
    }
    for(int i = 0;i<N;i++){
        if(right[i]==0 && left[i]==0){
            continue;
        }
        for(int j = 0;j<i;j++){
            if(right[j]==0 && left[j]==0){
                continue;
            }  
            if(min(right[i],right[j])>max(left[i],left[j])&& i!=j){
                right[i] = max(right[i],right[j]);
                left[i] = min(left[i],left[j]);
                right[j] = 0;
                left[j] = 0;
            }
        }
    }
    for(int i = 0;i<N;i++){
        ans+=right[i]-left[i];
    }
    cout<<ans<<endl;


    return 0;
}
錯大部分後30題題目(WA)
但j<N改成j<i就能過了
像這樣:
#include<bits/stdc++.h>
using namespace std;
int main(){
    int N,ans=0;
    cin>>N;
    int left[N],right[N];
    for(int i = 0;i<N;i++){
        cin>>left[i]>>right[i];
    }
    for(int i = 0;i<N;i++){
        if(right[i]==0 && left[i]==0){
            continue;
        }
//底下這裡改成;j<i就過了
        for(int j = 0;j<i;j++){
            if(right[j]==0 && left[j]==0){
                continue;
            }  
            if(min(right[i],right[j])>max(left[i],left[j])&& i!=j){
                right[i] = max(right[i],right[j]);
                left[i] = min(left[i],left[j]);
                right[j] = 0;
                left[j] = 0;
            }
        }
    }
    for(int i = 0;i<N;i++){
        ans+=right[i]-left[i];
    }
    cout<<ans<<endl;


    return 0;
}