第一遍写60分,找了半天没有逻辑错误,百度之后,发现是因为int类型的问题,测试用例的数据超过了int的范围,要使用long型
1 题目
2 代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] temp = br.readLine().split(" ");
Map<Integer, Integer> signal = new HashMap<Integer, Integer>();
signal.put(1, Integer.parseInt(temp[0])); // 红灯
signal.put(2, Integer.parseInt(temp[1])); // 黄灯
signal.put(3, Integer.parseInt(temp[2])); // 绿灯
long n = Integer.parseInt(br.readLine().split(" ")[0]);
long totalTime = 0;
long leftTime = 0;
for (int i = 0; i < n; i++) {
String[] str = br.readLine().split(" ");
long k = Integer.parseInt(str[0]);
long time = Integer.parseInt(str[1]);
if (k == 0) { // 直接通行
totalTime += time;
}
leftTime = totalTime % (signal.get(1) + signal.get(2) + signal.get(3)); // 只算一个周期内的
if (k == 1) { // 出发时该点为红灯
if (leftTime <= time) { // 到达时为红灯
totalTime = totalTime + (time - leftTime);
} else if (leftTime <= time + signal.get(3)) {// 到达时为绿灯
continue;
} else if (leftTime <= time + signal.get(3) + signal.get(2)) {// 到达时为黄灯
totalTime = totalTime + (time + signal.get(3) + signal.get(2) - leftTime) + signal.get(1);
} else if (leftTime <= time + signal.get(3) + signal.get(2) + signal.get(1)) {// 到达时为红灯
totalTime = totalTime + (time + signal.get(3) + signal.get(2) + signal.get(1) - leftTime);
}
}
if (k == 2) {// 出发时该点为黄灯
if (leftTime <= time) { // 到达时为黄灯
totalTime = totalTime + (time - leftTime) + signal.get(1);
} else if (leftTime <= time + signal.get(1)) {// 到达时为红灯
totalTime = totalTime + (time + signal.get(1) - leftTime);
} else if (leftTime <= time + signal.get(1) + signal.get(3)) {// 到达时为绿灯
continue;
} else if (leftTime <= time + signal.get(1) + signal.get(3) + signal.get(2)) {// 到达时为黄灯
totalTime = totalTime + (time + signal.get(1) + signal.get(3) + signal.get(2) - leftTime)
+ signal.get(1);
}
}
if (k == 3) {// 出发时该点为绿灯
if (leftTime <= time) {// 到达时为绿灯
continue;
} else if (leftTime <= time + signal.get(2)) {// 到达时为黄灯
totalTime = totalTime + (time + signal.get(2) - leftTime) + signal.get(1);
} else if (leftTime <= time + signal.get(2) + signal.get(1)) {// 到达时为红灯
totalTime = totalTime + (time + signal.get(2) + signal.get(1) - leftTime);
} else if (leftTime <= time + signal.get(2) + signal.get(1) + signal.get(3)) {// 到达时为绿灯
continue;
}
}
}
System.out.println(totalTime);
br.close();
}
}
官网评定
免费分享超过1000本计算机类电子书,包含编程语言、大数据、机器学习、校招面试经验等
(https://github.com/xiaoleetongxue/csbooks
)
更多考研资料、调剂技巧可以关注我的公众号,也可以加我的微信