zoukankan      html  css  js  c++  java
  • 经济节约

    Description
    由于经济紧张,某国国王决定减少一部分多余的士兵,这些士兵在边界都有各自的管辖范围。例如,士兵x 的管辖范围[ax,bx]。
    我们定义:对于i号士兵,如果存在j号士兵的管辖范围[aj,bj], aji且bij成立,那么i号士兵就是多余的。给出多个士兵的管辖范围,问有多少个士兵是多余的?

    Input
    有多组数据,每组数据的第一行为一个整数n(1<=n<=100000),下面n行每行包含两个整数ai,bi,代表i号士兵的管辖范围(0<=aii<=200000)。
    所有的ai是不同的,bi也是不同的。

    Output

    输出多余士兵的个数。

    Sample Input
    5
    0 10
    2 9
    3 8
    1 15
    6 11
    Sample Output
    3

    题目意思:给定一个士兵的管辖范围,若再有士兵的管辖范围包含他,那么他就是多余的,反之就不是。

    解题思路:这道题有一点贪心的意味,贪心方案将每一个士兵按照管辖的结束范围(或者开始的范围)有小到大排序,比较另一边,遇到小的加一,大的更新。

    上代码:

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    struct message
    {
        int x;
        int y;
    } a[100100];
    int my_comp(message a,message b)
    {
        if(a.y>b.y)
            return 1;
        else
            return 0;
    }
    int main()
    {
        int n,i,count,min;
        while(scanf("%d",&n)!=EOF)
        {
            for(i=0; i<n; i++)
            {
                scanf("%d%d",&a[i].x,&a[i].y);
            }
            sort(a,a+n,my_comp);
            min=a[0].x ;
            count=0;
            for(i=1; i<n; i++)
            {
                if(a[i].x<min)
                {
                    min=a[i].x;
                }
                else
                {
                    count++;
                }
            }
            printf("%d
    ",count);
        }
        return 0;
    }
  • 相关阅读:
    Debian 安装配置(包括kdevelop)
    linux matlab2016 安装
    Qt5.7 无法输入中文问题
    阻塞方法与InterruptedException
    java的null
    原子性、可见性、有序性与指令重排序
    物理机内存模型与java内存模型
    java构造函数总结
    什么时候需要用super
    重载与重写
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/8709535.html
Copyright © 2011-2022 走看看