华为OD机考-异常的打卡记录-字符串(JAVA 2025B卷)



java 复制代码
public class AbnormalAttendance {

    static class Attendance{
        String id;
        Integer time;
        Integer distance;
        String actualDeviceNumber;
        String registeredDeviceNumber;

        public Attendance(String id, Integer time, Integer distance, String actualDeviceNumber, String registeredDeviceNumber) {
            this.id = id;
            this.time = time;
            this.distance = distance;
            this.actualDeviceNumber = actualDeviceNumber;
            this.registeredDeviceNumber = registeredDeviceNumber;
        }

        public String getId() {
            return id;
        }

        public void setId(String id) {
            this.id = id;
        }

        public Integer getTime() {
            return time;
        }

        public void setTime(Integer time) {
            this.time = time;
        }

        public Integer getDistance() {
            return distance;
        }

        public void setDistance(Integer distance) {
            this.distance = distance;
        }

        public String getActualDeviceNumber() {
            return actualDeviceNumber;
        }

        public void setActualDeviceNumber(String actualDeviceNumber) {
            this.actualDeviceNumber = actualDeviceNumber;
        }

        public String getRegisteredDeviceNumber() {
            return registeredDeviceNumber;
        }

        public void setRegisteredDeviceNumber(String registeredDeviceNumber) {
            this.registeredDeviceNumber = registeredDeviceNumber;
        }
    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int N = sc.nextInt();
            sc.nextLine();
//            2
//            {id},{time},{distance},{actualDeviceNumber},{registeredDeviceNumber}
//            100000,10,1,ABCD,ABCD
//            100000,50,10,ABCD,ABCD
            List<String> list = new ArrayList<>(N);
            for(int i=0;i<N;i++){
                String nextLine = sc.nextLine();
                list.add(nextLine);
            }
            solve(list,N);
        }
    }
    public static void solve(List<String> list,int N){
        List<Attendance> attendanceList = new ArrayList<>(N);
        for(String line:list){
            String[] split = line.split(",");
            Attendance attendance = new Attendance(split[0], Integer.parseInt(split[1]), Integer.parseInt(split[2]), split[3], split[4]);
            attendanceList.add(attendance);
        }
        List<Integer> index = new ArrayList<>(N);
        for(int i=0;i<N;i++){
            Attendance attendance = attendanceList.get(i);
            if(!attendance.getRegisteredDeviceNumber().equals(attendance.getActualDeviceNumber())){
                index.add(i);
            }
            for(int j=i+1;j<N;j++){
                Attendance attendance1 = attendanceList.get(j);
                if(Math.abs(attendance1.getTime()-attendance.getTime())<=60 && Math.abs(attendance1.getDistance()-attendance.getDistance())>5){
                    index.add(i);
                    index.add(j);
                }
            }
        }
        List<Integer> collect = index.stream().distinct().collect(Collectors.toList());
        if(collect.isEmpty()){
            System.out.println("null");
        }else{
            for(int i=0;i<collect.size();i++){
                System.out.print(list.get(collect.get(i)));
                if(i!=collect.size()-1){
                    System.out.print(";");
                }
            }
        }
    }
}
相关推荐
大模型玩家七七43 分钟前
基于语义切分 vs 基于结构切分的实际差异
java·开发语言·数据库·安全·batch
历程里程碑43 分钟前
Linux22 文件系统
linux·运维·c语言·开发语言·数据结构·c++·算法
牛奔2 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
寻星探路6 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
lly2024067 小时前
Bootstrap 警告框
开发语言
2601_949146538 小时前
C语言语音通知接口接入教程:如何使用C语言直接调用语音预警API
c语言·开发语言
曹牧8 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
KYGALYX8 小时前
服务异步通信
开发语言·后端·微服务·ruby
zmzb01038 小时前
C++课后习题训练记录Day98
开发语言·c++