南宫凝忆


私信TA

用户名:NGNY

访问量:3087

签 名:

等  级
排  名 16119
经  验 769
参赛次数 0
文章发表 6
年  龄 0
在职情况 学生
学  校 山东科技大学
专  业

  自我简介:


注意事项:

  当有不连续订单时,减完分数后,应先判断一下是否<=3,再加2

参考代码:

import java.util.*;
public class G {
public static class Order{ //订单类
int ts;
int id;
public Order(int id,int ts){
this.id = id;
this.ts = ts;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int t = sc.nextInt();
List
for(int i=0;i<m;i++) {
int ts = sc.nextInt();
int id = sc.nextInt();
list.add(new Order(id,ts));
}
Collections.sort(list,new Comparator
@Override//对订单按照店铺id和时间ts排序
public int compare(Order arg0, Order arg1) {
if(arg0.id!=arg1.id)
return arg0.id-arg1.id;
else
return arg0.ts-arg1.ts;
}
});
int score[] = new int[n+1];//存储店铺优先级,下标从1到n
int prior[] = new int[n+1];//存储店铺是否加入优先缓存,下标从1到n
Order pre = new Order(list.get(0).id,list.get(0).ts);//取第一个订单
score[pre.id]=2;//第一个订单店铺优先级初始化为2
for(int i=1;i<list.size();i++) {//因为第一个订单已被取出,所以下标从1开始
Order aft = new Order(list.get(i).id,list.get(i).ts);//取下一个订单
if(aft.id==pre.id) {//如果本次订单和上一个订单属于一家店铺
if(aft.ts == pre.ts+1 || aft.ts == pre.ts)//如果有连续订单
score[pre.id]+=2;//店铺优先级+2
else {
score[pre.id]=Math.max(score[pre.id]-(aft.ts-pre.ts-1),0);//如果没有连续订单,优先级要减分
if(score[pre.id]<=3) prior[pre.id]=0;//减完后判断一下是否需要出队
score[pre.id]+=2;//加上本次订单的分数
}
}else {//如果本次订单和上次订单不是一家店铺
if(pre.ts!=t)//而且上次订单最后订单时间不是T
score[pre.id]=Math.max(score[pre.id]-(t-pre.ts),0);//减分
if(score[pre.id]<=3) prior[pre.id]=0;//减完后判断一下是否需要出队
score[aft.id]=2;//初始化下一个店铺的分数
}
if(score[pre.id]>5) prior[pre.id]=1;//如果优先级>5,进队
pre=aft;//指向下一个订单店铺
}
int num=0;
for(int i=1;i<=n;i++) {
if(prior[i]==1) num++;
}
System.out.println(num);
}
}


 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区