PTA 天梯赛 L2_021

考察自定义结构体的排序

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;

public class Main {

    public static void main(String[] args) throws Exception {  // 自定义结构体排序
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
//        int[][] list = new int[N][2];
//        String[] name = new String[N];
        Node[] nlist = new Node[N];
        Set<String> set = new HashSet<String>();
        for (int i = 0; i < N; i++) {
            set.clear();
            String[] s = bf.readLine().split(" ");
//            name[i] = s[0]; // 输入的名字
            int times = Integer.parseInt(s[1]);
//            list[i][1] = times; // 总共输入的数字
            for (int j = 2; j < s.length; j++) {
                set.add(s[j]);
            }
//            list[i][0] = set.size(); // 不重复的标签的数量
            nlist[i] = new Node(s[0], set.size(), times);
        }  // 完成输入的功能
//        for(Node e: nlist) {
//            System.out.println(e.name + " " + e.setLen + " " + e.allLen);
//        }
//        System.out.println();
        Arrays.sort(nlist, new cmp());

//        for(Node e: nlist) {
//            System.out.println(e.name + " " + e.setLen + " " + e.allLen);
//        }

        if(nlist.length >= 3) {
            for(int i=nlist.length-1; i>=nlist.length-3; i--) {
                if(i == nlist.length-1) {
                    System.out.print(nlist[i].name);
                } else {
                    System.out.print(" "+nlist[i].name);
                }
            }
        } else {
            if(nlist.length == 2) {
                for(int i=nlist.length-1; i>=nlist.length-2; i--) {
                    if(i == nlist.length-1) {
                        System.out.print(nlist[i].name);
                    } else {
                        System.out.print(" "+nlist[i].name);
                    }
                }
                System.out.print(" " + "-");
            } else if(nlist.length == 1) {
                System.out.print(nlist[0].name + " - -");
            }
        }
    }

    static class cmp implements Comparator<Node>{
        // 降序排列
        public int compare(Node A, Node B) {
            if (A.setLen == B.setLen) {
                if (A.allLen < B.allLen)
                    return 1;
                else
                    return -1;
            }
            if (A.setLen > B.setLen)
                return 1;
            else
                return -1;
        }
    }

    static class Node {
        String name;
        int setLen;
        int allLen;
        Node(String name, int setLen, int allLen) {
            this.name = name;
            this.setLen = setLen;
            this.allLen = allLen;
        }

    }

}

最后两个点超时了.

原文地址:https://www.cnblogs.com/huangZ-H/p/10612547.html

时间: 2024-08-28 12:59:16

PTA 天梯赛 L2_021的相关文章

『ACM C++』 PTA 天梯赛练习集L1 | 001-006

应师兄要求,在打三月底天梯赛之前要把PTA上面的练习集刷完,所以后面的时间就献给PTA啦~ 后面每天刷的题都会把答案代码贡献出来,如果有好的思路想法也会分享一下~ 欢迎大佬提供更好的高效率算法鸭~ ------------------------------------------------L1-001---------------------------------------------------------- 这道超级简单的题目没有任何输入. 你只需要在一行中输出著名短句“Hello

pta 天梯赛 L1-050 倒数第N个字符串 (15 分)

给定一个完全由小写英文字母组成的字符串等差递增序列,该序列中的每个字符串的长度固定为 L,从 L 个 a 开始,以 1 为步长递增.例如当 L 为 3 时,序列为 { aaa, aab, aac, ..., aaz, aba, abb, ..., abz, ..., zzz }.这个序列的倒数第27个字符串就是 zyz.对于任意给定的 L,本题要求你给出对应序列倒数第 N 个字符串. 输入格式: 输入在一行中给出两个正整数 L(2 ≤ L ≤ 6)和 N(≤10?5??). 输出格式: 在一行中

『ACM C++』 PTA 天梯赛练习集L1 | 007-0011

真的是忙头晕了,学业.ACM打题.班级活动.自学新东西,哇这充实的大学~ ------------------------------------------------L1-007---------------------------------------------------------- 念数字 输入一个整数,输出每个数字对应的拼音.当整数为负数时,先输出fu字.十个数字对应的拼音如下: 0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7:

『ACM C++』 PTA 天梯赛练习集L1 | 016-017

今天开了两个大会,时间都给占掉了,就刷了两道题~ 明天加油!!! ------------------------------------------------L1-016---------------------------------------------------------- 查验身份证 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,

『ACM C++』 PTA 天梯赛练习集L1 | 018-020

终于一周有这么一天能够安静下来好好学习打打题,还是很美滋滋的哈哈~加油加油~ ------------------------------------------------L1-018---------------------------------------------------------- 大笨钟 微博上有个自称“大笨钟V”的家伙,每天敲钟催促码农们爱惜身体早点睡觉.不过由于笨钟自己作息也不是很规律,所以敲钟并不定时.一般敲钟的点数是根据敲钟时间而定的,如果正好在某个整点敲,那么“当

PTA天梯赛L2

L2-001 紧急救援 题意:就是给你一张n<500的图:让你求最短路径,最短路条数,以及路径: 做法,先用dijkstra求最短路,然后dfs找最短路条数,以及点权的最大值: 一般dfs不就可以解决这个问题吗,像n皇后求次数,注意回溯即可: 那如何dfs确定这条路是最短路径呢?贪心思想,枚举每一个邻居,如果满足   dis[y.v]==dis[x]+y.w 说明当前邻居 通过这个点可以一直是最短路径,这样dfs下去,如果碰到d就return掉: 主要是没有想到用dfs求最短路径条数,然后注意回

PTA|团体程序设计天梯赛-练习题目题解锦集(C/C++)(持续更新中……)

PTA|团体程序设计天梯赛-练习题目题解锦集(持续更新中) 实现语言:C/C++:      欢迎各位看官交流讨论.指导题解错误:或者分享更快的方法!! 题目链接:https://pintia.cn/problem-sets/994805046380707840/problems 目录 (点击对应题目即可进入相应题解--小声BB--) L1-001 Hello World (5 分) L1-002 打印沙漏 (20 分) L1-003 个位数统计 (15 分) L1-004 计算摄氏温度 (5

PTA L2-023 图着色问题-前向星建图 团体程序设计天梯赛-练习集

L2-023 图着色问题 (25 分) 图着色问题是一个著名的NP完全问题.给定无向图,,问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色? 但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解. 输入格式: 输入在第一行给出3个整数V(0).E(≥)和K(0),分别是无向图的顶点数.边数.以及颜色数.顶点和颜色都从1到V编号.随后E行,每行给出一条边的两个端点的编号.在图的信息给出之后,给出了一个正整数N(≤),是待

PAT 团体程序设计天梯赛-练习集 题解(凑零钱,堆栈,社交集群)

开始准备cccc(cry)天梯赛了,第一周训练题,把官网挂出的训练题刷完了,对pat有了一点点的熟悉感. L1-1  就不说了... L1-2 打印沙漏 一个变量保存空格数,一个变量保存沙漏符号数,打印就行了,但这题话说wrong好几次啊,坑点是沙漏符号后面不打印空格,orz... <span style="font-size:14px;">#include<iostream> #include<stdio.h> #include<math.h