交替领先的赛跑(洛谷P1568题题解,Java语言描述)
生活随笔
收集整理的這篇文章主要介紹了
交替领先的赛跑(洛谷P1568题题解,Java语言描述)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接
P1568題目鏈接
分析
開始我想的是畫高中物理(哦不甚至是初中)的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);} }總結
以上是生活随笔為你收集整理的交替领先的赛跑(洛谷P1568题题解,Java语言描述)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库的关系运算和完整性约束
- 下一篇: 不连续字符的串计数(洛谷P4439题题解