牛客算法入门课(第二课,课后题Laptop,难度2星)

牛客算法入门课(第二课,课后题Laptop,难度2星)

题目链接

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 131072K,其他语言262144K
64bit IO Format: %lld

题目描述

FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷。
但是重点在于,他非常适合ACM!并在最近的区域赛中获得了不错的成绩。
拿到奖金后FST决定买一台新笔记本,但是FST发现,在价格能承受的范围内,笔记本的内存和速度是不可兼得的。
可是,有一些笔记本是被另外一些“完虐”的,也就是内存和速度都不高于另外某一个笔记本,现在FST想统计一下有多少笔记本被“完虐”。

输入描述:

第一行一个正整数n,
表示笔记本的数量。接下来n行,每行两个正整数Mi,Si表示这款笔记本的内存和速度。
n≤105,Mi,Si≤109

输出描述:

一行,一个正整数,表示被完虐的笔记本数。

示例1

输入

[复制](javascript:void(0)

4
100 700
200 500
50 100
300 400

输出

[复制](javascript:void(0)

1

备注:

Mi和Si都是越大越优。
数据保证Mi互不相同,Si也互不相同。

java

创建一个对象 储存内存和速度两种属性

按照内存从大到小的顺序排序

按照内存从大到小进行遍历,比较当前的速度是否小于上一个(拍完序内存已经小于上一个了,只比较速度)

如果速度小于上一个那么(计数)cont++,否则更新速度的最大值

最后输出cont

import java.util.Arrays;
import java.util.Scanner;

public class laptop {
    static str[] strs=new str[100010];
    static int n;
    static int max;
    static int cont;
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n=sc.nextInt();
        //读入数据
        for (int i = 1; i <=n; i++) {
            strs[i]=new str(sc.nextInt(),sc.nextInt());
        }
     //对象按照内存排序
        Arrays.sort(strs,1,n+1);
          //初始第一个速度默认最大
        max=strs[1].b;
        for (int i = 2; i <=n; i++) {
            //从内存最大到最小遍历,如果存在一个速度和内存都没有上一个强的那么cont++
            //否则更新这个最大速度
            if(strs[i].b<=max) cont++;
            else max=strs[i].b;
        }
        System.out.println(cont);
    }

}
class str implements Comparable {
    int a;
    int b;
   
    public str(int a, int b) {
        this.a = a;
        this.b = b;
    }

    @Override
    public String toString() {
        return "str{" +
                "a=" + a +
                ", b=" + b +
                '}';
    }
    //比较器,自定义比较方法
    @Override
    public int compareTo(Object o) {
        o=(str)o;
        return ((str) o).a-this.a;
    }
}

你可能感兴趣的:(算法,数据结构,排序)