首页 > 试题广场 >

魔法相册的重复记忆

[编程题]魔法相册的重复记忆
  • 热度指数:1661 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小红正在整理自己的 latex 本魔法相册,她发现有些珍贵的记忆(照片)由于备份原因,同时出现在了多本相册中。
每张照片由一个唯一的标识符 latex 和一个时间戳 latex 组成。在一个相册内部,所有照片的 latex 互不相同;但在不同的相册之间,可能存在 latex 相同的照片。已知相同的 latex 总是对应相同的时间戳 latex
小红需要找出所有在超过一本相册中出现过的照片,并统计它们在所有相册中出现的总次数。请将这些重复的照片按照时间戳 latex 从小到大排序后输出。

输入描述:
第一行输入一个整数 latexlatex),表示相册的数量。
接下来的 latex 行,每行包含若干个由空格分隔的整数,表示该相册内的照片信息。每两个整数为一个组合,前一个为照片的 latex,后一个为该照片的时间戳 latex
每行照片的数量 latex 满足 latex。所有 latexlatex 均为非负整数。


输出描述:
输出一行整数,每两个整数为一个组合,分别为重复出现的照片 latex 及其在所有相册中出现的总次数。
组合之间按时间戳 latex 升序排列。输入保证至少存在一张重复的照片,且排序结果唯一。
示例1

输入

4
999 1 998 2 997 3 996 4 995 5
994 6 993 7 992 8 991 9 990 10
989 11 988 12 987 13
999 1 995 5 986 14

输出

999 2 995 2

说明

样例说明:
- 照片 latexlatex 的时间戳为 latex,在第 1 本和第 4 本相册中出现,总次数为 latex
- 照片 latexlatex 的时间戳为 latex,在第 1 本和第 4 本相册中出现,总次数为 latex
- 其余照片均只出现了一次。
- 按照时间戳排序,latex,故先输出 latex,再输出 latex

备注:
本题由牛友@Charles 整理上传
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int n=in.nextInt();
        HashMap<Integer,Integer> fremap=new HashMap<>();
        HashMap<Integer,Integer> idmap=new HashMap<>();
        List<Integer> res=new ArrayList<>();
        // while (n-->0) { // 注意 while 处理多个 case
       
            while(in.hasNext()){
                int id=in.nextInt();
                int time=in.nextInt();
                idmap.put(id,time);
                fremap.put(id,fremap.getOrDefault(id,0)+1);
               
            }
        // }
        for (int id : fremap.keySet()) {
            if (fremap.get(id) > 1) {
                res.add(id);
            }
        }
        res.sort((a,b)->idmap.get(a)-idmap.get(b));
        for(int i:res){
            System.out.print(i+" "+fremap.get(i)+" ");
        }
        in.close();
    }
}
发表于 2026-04-12 11:42:38 回复(0)