题目链接
分析
开始我想的是画高中物理(哦不甚至是初中)的v-t图像和s-t图像,试图分析,后来发现可能是我太笨了?反正没法写代码,就冷静下来思考思考怎么处理。
这题很不友好的是没给总里程、总时间的任何一个。
还有,一定要先给完一个人再给第二个,就必须存数组,费空间。
更过分的是,二者不同步,给的是一段一段的,除非细化到每一秒,否则没法步调一致……
只能开大数组咯……
开三个大数组,第一个先记录SH每时刻的路程,再读一下KC的每一时刻的路程,在记录每时刻路程结束的时候得到总路程。
为什么比较的时候要赋值为1和2,而不是直接利用初始化的0呢?
因为我们从1开始记录,0时刻是0:0,可能(其实根据多个测试点,是一定的)会WA……
再给一下最后-1的理由:
因为flag[0]=0,而falg[1]不可能为0,只可能为1或2,所以flag[0]到flag[1]多加了1,所以要减掉1。
AC代码(Java语言描述)
import java.util.Scanner;
public class Main {
private static int[] sh_array = new int[1000010], kc_array = new int[1000010], flag = new int[1000010];
private static Scanner scanner = new Scanner(System.in);
private static int init(int[] array, int num) {
int temp_v, temp_t, pointer = 0;
for(int i = 0; i < num; i++) {
temp_v = scanner.nextInt();
temp_t = scanner.nextInt();
for(int j = 1; j <= temp_t; j++) {
array[pointer+j] = array[pointer+j-1] + temp_v;
}
pointer += temp_t;
}
return pointer;
}
public static void main(String[] args) {
int n = scanner.nextInt(), m = scanner.nextInt(), pointer = 0, counter = 0;
pointer = init(sh_array, n);
init(kc_array, m);
scanner.close();
for(int i = 1; i <= pointer; i++) {
if(sh_array[i] >= kc_array[i]) {
flag[i] = 1;
} else {
flag[i] = 2;
}
if(flag[i-1] != flag[i]) {
counter++;
}
}
System.out.println(counter-1);
}
}