还要努力

问题 A: 移除木板

题目描述
创意班机房的地板要翻新啦,营长搬来了许多长短不一的木板。手痒的LZY趁大家不注意,把所有的木板叠在了一起,并且给大家提出了一个问题:我们最少需要移除多少块木板,使剩下的木板互相不重叠?作为ACMer的你,可以写个程序计算一下吗?
输入
测试样例由多组测试数据组成。每组测试数据第一行输入一个正整数n ( 1 <= n <= 10000 ),接下来 n行每行输入两个正整数,a,b ( 1 <= a , b <= 10000 )代表每块木板的起始坐标和最终坐标。
输出
输出每组测试样例最少需要移除的木板数量
样例输入
4
1 2
2 3
3 4
1 3
3
1 2
1 2
1 2
2
1 2
2 3
样例输出
1
2
0
提示
对于第一组样例,我们只需要移除区间为 1 3 的木板后,剩下的木板没有重叠
对于第二组样例,我们只需要移除2组 1 2 的木板后,剩下的木板没有重叠
对于第三组样例,我们不需要任何移除,他们本身没有重叠,注意:区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。

AC代码:

#include<bits/stdc++.h>
using namespace std;
struct node{
    int st,en;
}f[10005];
bool cmp(node a,node b){
    return a.en<b.en;
}
int main(){
    int n;
    while(cin>>n){
        for(int i=0;i<n;i++){
            int a,b;
            cin>>a>>b;
            if(a<b){
                f[i].st=a;
                f[i].en=b;
            }
            else{
                f[i].en=a;
                f[i].st=b;
            }
        }
        sort(f,f+n,cmp);
        int sum=1,m=f[0].en;
        for(int i=1;i<n;i++){
            if(f[i].st>=m){
                sum++;
                m=f[i].en;
            }
        }
        int ans=n-sum;
        cout<<ans<<endl;
    }
    return 0;
}

一开始题目理解错了

后面看懂题目和题解,这题和hdoj上面的2037一样

还是太菜了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值