题目描述
有大佬可以帮忙看下代码吗,我不懂最大规模的测试数据不会过去,
我查看好几遍都觉得自己这不会超时的,可为什么会错,我萌新一个,望指导。
Java+ 代码
import java.io.*;
import java.util.*;
public class Main {//该解法只能获得一部分分数
private static int terminal;
private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static boolean[] storeState=new boolean[100002];//记录店是否处于优先状态
public static void main(String[] args) throws IOException{
String[] ss = br.readLine().split(" ");
int N=Integer.parseInt(ss[0]);
int M=Integer.parseInt(ss[1]);
int T=Integer.parseInt(ss[2]);
int[] ans=new int[N+1];//记录店家的优先值
int[][] shopsNum=new int[N+1][1000];
int[] storeNum=new int[N+1];//记录每家店的订单总数
Map<Integer, Integer> mapID = new HashMap<Integer,Integer>();//记录哪些店是由订单,记录店id
for (int i = 1; i <=M; i++) {
ss = br.readLine().split(" ");
int a=Integer.parseInt(ss[0]);//哪个时刻
int b=Integer.parseInt(ss[1]);//哪家店
mapID.put(b, a);
shopsNum[b][storeNum[b]] =a;//记录店订单,还有每家店的订单数量
storeNum[b]++;//记录哪些店有订单
}
for (int i : mapID.keySet()) {//有多少家店满足3个订单以上的
if(storeNum[i]<=2) continue;//进行剪枝
Arrays.sort(shopsNum[i],0,storeNum[i]);
ans[i]=2;
int len=storeNum[i];
for (int k1=1 ; k1 <len; k1++) {//遍历每一个店的订单的总数
int result=shopsNum[i][k1]-shopsNum[i][k1-1];//两个时刻相减例如:4~8
if(result!=0) {
result--;
if(result>ans[i]) {
ans[i]=0;
}else {
ans[i]-=result;
}
}
if(ans[i]<=3) {
storeState[i]=false;
}
ans[i]+=2;
if(ans[i]>5) {
storeState[i]=true;
}
}
if(shopsNum[i][len-1]<T) {
int result=T-shopsNum[i][len-1];
if(result>=ans[i]) {
storeState[i]=false;
}else {
ans[i]-=result;
if(ans[i]<=3) {
storeState[i]=false;
}
}
}
if(storeState[i]) {
terminal++;
}
}
bw.write(terminal + "\n");
bw.close();
br.close();
}
}
Java大数据读取你不应该用Scanner,而应该用BufferedReader。你的代码写的有点乱,没仔细看你的思路,正确的思路后面枚举的应该是每一个商店的订单,而不是根据时间线去枚举。贴一份我AC的代码
嗯,我写比较乱。现在是memory limit exceeded,谢谢指点.
希望有人帮忙分析分析阿
和我一样,时间复杂度高了