CCF-201809-2 買菜
阿新 • • 發佈:2018-11-16
試題編號: | 201809-2 |
試題名稱: | 買菜 |
時間限制: | 1.0s |
記憶體限制: | 256.0MB |
問題描述: | 問題描述 小H和小W來到了一條街上,兩人分開買菜,他們買菜的過程可以描述為,去店裡買一些菜然後去旁邊的一個廣場把菜裝上車,兩人都要買n種菜,所以也都要裝n次車。具體的,對於小H來說有n個不相交的時間段[a1,b1],[a2,b2]...[an,bn]在裝車,對於小W來說有n個不相交的時間段[c1,d1],[c2,d2]...[cn,dn]在裝車。其中,一個時間段[s, t]表示的是從時刻s到時刻t這段時間,時長為t-s。 輸入格式 輸入的第一行包含一個正整數n,表示時間段的數量。 輸出格式 輸出一行,一個正整數,表示兩人可以聊多長時間。 樣例輸入 4 樣例輸出 3 資料規模和約定 對於所有的評測用例,1 ≤ n ≤ 2000, ai < bi < ai+1,ci < di < ci+1,對於所有的i(1 ≤ i ≤ n)有,1 ≤ ai, bi, ci, di ≤ 1000000。 |
這題測試樣例一開始讓我有點懵,我推不出3,程式跑出來是8,結果發現它的[a1,b1]這種區間是左閉右開的不是左閉右閉的,
那為啥它要這樣寫服了笑哭臉,程式碼沒東西,遍歷一下遍歷到一個讓陣列值+1,如果是兩個人時間交集的時刻的話,那個時刻陣列的
值就為2所以最後輸出陣列中值為2的元素的個數即可.坑點在區間的左閉右開,不過發現不對試一下應該也能想到.
ac程式碼:
import java.util.Scanner; public class Main { Scanner scanner = new Scanner(System.in); public void buyFood(){ int n = scanner.nextInt(); int[] H = new int[1000001]; int start = 0; int end = 0; int min = Integer.MAX_VALUE; int max = 0; for(int i=0;i<2*n;i++){ start = scanner.nextInt(); end = scanner.nextInt(); min = Math.min(min,start); max = Math.max(max,end); for(int j = start;j<end;j++) H[j]++; } int count = 0; for(int i=min;i<=max;i++){ if(H[i]==2) count++; } System.out.println(count); } public static void main(String[] args) { Main main = new Main(); main.buyFood(); } }