1. 程式人生 > >CCF-201809-2-買菜

CCF-201809-2-買菜

題目:
自己去官網看

思路:
計算兩個人裝車重疊的時間段。具體方法:建立一個時間段陣列,計每個時間段人出現的次數,比如小H在時刻3-時刻6裝車,就在時間段3(3-4),4(4-5),5(5-6) 加1,說明時間段3,4,5有人裝車,如果小W在4-8裝車,同理在時間段4,5,6,7 加1。最後算出時間段4,5出現了2次人,說明兩個人有相遇。(注意,要計算兩個人重合的時間,是算時間段的,不是時刻。時刻3-時刻6,有3個時間段(3-4,4-5,5-6))同理,處理剩下的時間段,最後統計時間點次數為2的有多少個。

樣例輸入
4
1 3
5 6
9 13
14 15
2 4
5 7
10 11
13 14
樣例輸出


3

圖解:
在這裡插入圖片描述

Java程式碼:

import java.util.Scanner;

public class 買菜 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        int[] t = new int[1000000];
        int count = 0;

        for (int i = 0; i < n * 2; i++) {
            int a = input.nextInt();
            int b = input.nextInt();
            for (int j = a; j < b; j++)
                t[j]++;
        }

        for (int i : t)
            if (i > 1)
                count++;

        System.out.println(count);
    }
}


python程式碼:

bk = [0 for i in range(1000000)]
n = int(input())
count = 0

for i in range(n * 2):
    a, b = [int(val) for val in input().split()]
    for j in range(a, b):
        bk[j] += 1

for val in bk:
    if val == 2:
        count += 1

print(count)

這次考證的第1,2題用不了多少時間,水題。。。。。。廣東的同學虧了。(因為颱風山竹,沒能去參加考證。)