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 }

 

 

未完待续····

猜你喜欢

转载自www.cnblogs.com/m17773572025/p/10068220.html