码迷,mamicode.com
首页 > 其他好文 > 详细

CCF能力认证历届第二题

时间:2018-12-05 02:07:49      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:关于   inf   namespace   font   names   min   code   max   span   

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 }

 

 

未完待续····

CCF能力认证历届第二题

标签:关于   inf   namespace   font   names   min   code   max   span   

原文地址:https://www.cnblogs.com/m17773572025/p/10068220.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!