手机App防沉迷系统-算法

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        int n=Integer.parseInt(in.nextLine());
        //已注册app列表
        List<Log> list=new ArrayList<>();
        for(int k=0;k<n;k++){
            String[] str=in.nextLine().split(" ");
            String name=str[0];
            int level=Integer.parseInt(str[1]);
            double begin=transTime(str[2]),end=transTime(str[3]);
            Log cur=new Log(begin,end,name,level);
            
            //冲突标志
            int conflict=0;
            for(int i=0;i<list.size();i++){
                Log pre=list.get(i);

                // 冲突发生
                if(check(pre,cur)){
                    conflict=1;
                    //待注册的app优先级更低,不能注册
                    if(pre.level>=cur.level){
                        break;
                    }
                    int j=i+1;
                    boolean flag=true;
                    //扫描pre之后注册的app信息
                    while(j<list.size()){
                        Log tmp=list.get(j);
                        // 存在冲突且已注册app的优先级更高,当前app不能注册
                        if(tmp.begin<cur.end&&tmp.level>cur.level){
                            flag=false;
                            break;
                        }
                        j++;
                    }
                    if(flag){
                        list.remove(i);
                        list.add(cur);
                    }else{
                       break;
                    }                                     
                }
            }
            //未发生冲突,注册
            if(conflict==0){
                list.add(cur);
            }
        }
        double query=transTime(in.nextLine());
        String ans="NA";        
        for(Log log:list){
            if(log.begin<=query&&query<=log.end){
                ans=log.name;
                break;
            }
        }  
        System.out.println(ans);      
    }
    //时间格式转成小时
    public static double transTime(String s){
        String[] arr=s.split(":");
        double ans=0;
        ans+=Integer.parseInt(arr[0]);
        ans+=Integer.parseInt(arr[1])*1.0/60;
        return ans;
    }
    //冲突检查
    public static boolean check(Log pre,Log cur){
        if(pre.end<=cur.begin||cur.end<=pre.begin){
            return false;
        }
        return true;
    }
}
class Log{
    double begin,end;
    String name;
    int level;
    public Log(double begin,double end,String name,int level){
        this.begin=begin;
        this.end=end;
        this.name=name;
        this.level=level;
    }
}

注:按照图例,应该不存在两个app注册时间仅有一个交点(相同时刻)的情况,如app1:   09:00-10:00, app2:  10:00-11:00

相关推荐

  1. 手机App沉迷系统-算法

    2024-05-12 07:04:04       34 阅读
  2. 【华为OD机试】手机App沉迷系统【C卷|100分】

    2024-05-12 07:04:04       32 阅读
  3. 游戏沉迷系统相关内容

    2024-05-12 07:04:04       45 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-12 07:04:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-12 07:04:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-12 07:04:04       87 阅读
  4. Python语言-面向对象

    2024-05-12 07:04:04       96 阅读

热门阅读

  1. 【汽车功能安全】NXP SKXX之STCU

    2024-05-12 07:04:04       33 阅读
  2. 算法训练营day36

    2024-05-12 07:04:04       190 阅读
  3. -CSSE3100/7100

    2024-05-12 07:04:04       35 阅读
  4. 大数据常用命令-Kafka

    2024-05-12 07:04:04       32 阅读
  5. 算法设计与分析期末复习题汇总

    2024-05-12 07:04:04       32 阅读
  6. 【八股系列】在css中link和@import的区别是什么?

    2024-05-12 07:04:04       35 阅读
  7. 常用CSS和XPATH元素定位方法

    2024-05-12 07:04:04       31 阅读
  8. Sass详解:颠覆CSS开发的新时代

    2024-05-12 07:04:04       28 阅读