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 }
未完待续····
原文地址:https://www.cnblogs.com/m17773572025/p/10068220.html
时间: 2024-10-25 13:48:19