20分

P1047 [NOIP2005 普及组] 校门外的树

HYVS799 @ 2024-08-02 18:27:37

#include <iostream>
using namespace std;
int main()
{
    int l, m;
    cin >> l;
    cin >> m;
    int s[100][2];
    for (int i = 0; i < m; i++)
    {
        cin >> s[i][0];
        cin >> s[i][1];
    }
    for (int i = 0; i < m - 1; i++)
        for(int j=0;j<m-1-i;j++)
        if (s[j][0] > s[j + 1][0])
        { 
            int a[2];
            for (int k = 0; k < 2; k++)
            {
                a[k] = s[j][k];
                s[j][k] = s[j + 1][k];
                s[j + 1][k] = a[k];
            }
        }
    int sum = 0,b=0;
    for(int i=0;i<m;i++)
    {
        int c = i;

            while (s[i][1] > s[i + 1][0])
            {   if (i >= m - 1)
                    break;
                i++;

            }
        b = s[i][1] - s[c][0]+1;
        sum += b;
    }
    sum = l + 1 - sum;
    cout <<sum;
}

by haimingbei @ 2024-08-02 18:32:13

@HYVS799

(AC,求关)

#include<bits/stdc++.h>
using namespace std;
int l,m,s=0,str[10005];
int main(){
    cin>>l>>m;
    for(int i=0;i<=l;i++)str[i]=0;
    for(int i=1;i<=m;i++){
        int u,v;
        cin>>u>>v;
        for(int j=u;j<=v;j++){
            if(str[j]==0)str[j]=1;
        }
    }
    for(int i=0;i<=l;i++){
        if(str[i]==0)s++;
    }
    cout<<s;
    return 0;
}

by aomiks @ 2024-08-02 20:36:23

用二维数组要排序然后区域计算

#include <iostream>
using namespace std;

void sortFirstColumn(int arr[][2], int m) {
    for (int i = 0; i < m - 1; i++) {
        for (int j = 0; j < m - i - 1; j++) {
            if (arr[j][0] > arr[j + 1][0]) {
                swap(arr[j][0], arr[j + 1][0]);
                swap(arr[j][1], arr[j + 1][1]);
            }
        }
    }
}

int main()
{
    int l,m,s=0,ss=0;
    cin>>l>>m;
    int a[m][2];
    for(int i= 0; i<m; i++)
    {
        for(int j=0; j<2; j++)
        {
            cin>>a[i][j];
        }           
    }

    sortFirstColumn(a,m);

    s= l+1; //总数 

    for(int i=0; i<m; i++) 
    {
        if(i!=m-1 && a[i+1][0]<=a[i][1]) //有重叠 
        {
            a[i+1][0]= a[i][0];
            a[i+1][1]= max(a[i][1],a[i+1][1]);
        }
        else //无重叠 
        {
            ss+= a[i][1]-a[i][0]+1;
        }
    }

    cout<<s-ss;

    return 0;
}

|