3-8 A: 移除木板

题目描述

创意班机房的地板要翻新啦,营长搬来了许多长短不一的木板。手痒的LZY趁大家不注意,把所有的木板叠在了一起,并且给大家提出了一个问题:我们最少需要移除多少块木板,使剩下的木板互相不重叠?作为ACMer的你,可以写个程序计算一下吗?

输入

测试样例由多组测试数据组成。每组测试数据第一行输入一个正整数n ( 1 <= n <= 10000 ),接下来 n行每行输入两个正整数,a,b ( 1 <= a , b <= 10000 )代表每块木板的起始坐标和最终坐标。

输出

输出每组测试样例最少需要移除的木板数量

思路:

会场安排最多场次一样的问题。把结束时间进行递增排序,使得变成包含的小问题。
比赛的时候没有过,终极原因:(1 <= a , b <= 10000),没说a不能大于b呀!!!
审题很关键。。。
审题很关键。。。
审题很关键。。。
审题很关键。。。
审题很关键。。。

AC代码:

#include<bits/stdc++.h>
using namespace std;
 
int n;
struct ma{
    int x,y;
}a[10005];
int cmp(ma x,ma y){
    return x.y<y.y;
}
int b[10005],f,min1;
int main(){
    while(cin>>n){
        memset(b,0,sizeof b);
        for(int i=0;i<n;i++){
            scanf("%d %d",&a[i].x,&a[i].y);
            if(a[i].x>a[i].y)swap(a[i].x,a[i].y);
        }
        sort(a,a+n,cmp);
        f=1;
        min1=a[0].y;
        for(int i=1;i<n;i++){
            if(a[i].x>=min1){
                f++;
                min1=a[i].y;
            }
        }
        f=n-f;
        cout<<f<<endl;
    }
    return 0;
}
发布了34 篇原创文章 · 获赞 6 · 访问量 1353

猜你喜欢

转载自blog.csdn.net/qq_44669377/article/details/104743224
今日推荐