1. 程式人生 > >CCF能力認證歷屆第二題

CCF能力認證歷屆第二題

201809-2. 買菜

解題思路:

主要就是判斷小H和小W的裝車時間段是否有重疊區間。關於判斷重疊區間,對於給定的兩個區間(a,b)和(c,d),顯然當且僅當a≤d且b≥c時才會有重疊區間,而重疊區間長度L為min(b,d)-max(a,c),把所有重疊區間的長度進行累加求和,就可以知道倆人可以聊多長時間。

100分程式碼:

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 void Input(int a[][2],int n);  //用來輸入裝車時間
 5 
 6 int main()
 7
{ 8 int n; 9 cin >> n; //時間段的數量 10 int H[n][2]; //小H的各個裝車的時間段 11 Input(H,n); 12 int W[n][2]; //小W的各個裝車的時間段 13 Input(W,n); 14 int ans = 0; 15 for (int i = 0; i < n; i++) 16 { 17 for (int j = 0; j < n; j++) 18 { 19 //
對於給定的兩個區間(a,b)和(c,d),顯然當且僅當a≤d且b≥c時才會有重疊區間 20 if(H[i][0]<=W[j][1]&&H[i][1]>=W[j][0]) //判斷有無重疊區間 21 { 22 //重疊區間長度L為min(b,d)-max(a,c) 23 ans += min(H[i][1],W[j][1])-max(H[i][0],W[j][0]); //加上重疊區間 24 } 25 } 26 }
27 cout << ans << endl; 28 return 0; 29 } 30 31 void Input(int a[][2],int n) 32 { 33 for (int i = 0; i < n; ++i) 34 { 35 cin >> a[i][0] >> a[i][1]; 36 } 37 }

 

 

未完待續····