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

13. 松雅的新旅馆

时间:2020-05-09 16:38:39      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:abs   double   +=   位置   push   str   style   坐标轴   out   

13. 松雅的新旅馆

【问题描述】

      松雅终于确定了新建旅馆的城市,她看中了该城市临海一条笔直的街道,此处风景优美,街道另一边是海滩,不允许有任何建筑。

      不妨将该街道视作为一条坐标轴(x-轴),街道上已有 n 座方形建筑,它们的边平行于 x 轴,其中的一条横边的中心点位于坐标轴上,这些房子不会交叠,但可以相互挨着。

      松雅所建的旅馆的横边长为 t,并且至少与一座已有的建筑相互挨着,这样她可以节省一些建设费用,当然,这座建筑的一条横边必须位于 x 轴上,房子不能交叠。

      给出所有已有的建筑的中心点和横边长(忽略建筑墙体的厚度),请你帮她找出可以新建旅馆的位置有多少?

【输入形式】

      输入的第一行为两个正整数 n 和 t( nt ≤ 1000),分别该街道上已有的建筑数量以及她所建旅馆的横边长。

      接下来的 n 行,每行两个整数 xi 和 ai,分别表示每座已有建筑位于坐标轴上的横边的中心点和横边长,其中,-1000 ≤ xi ≤1000,1≤ ai ≤1000。

【输出形式】

      请输出可以新建旅馆的可能的位置的数量。
【样例输入1】

2 2
0 4
6 2

【样例输出1】

4

【样例输入2】

2 2
0 4
5 2

【样例输出2】

3

【样例输入3】

2 3
0 4
5 2

【样例输出3】

2

【样例说明】

注意,新建房子的中心坐标可能为非整数,输入的相邻xi 之间的大小关系不确定。
【评分标准】

 1 #include <iostream>
 2 #include <vector>
 3 #include <cmath>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int n, m;
10     cin >> n >> m;
11     int count = n;
12     vector<pair<double, double> > vec;
13     while (count--)
14     {
15         double a, b;
16         cin >> a >> b;
17         vec.push_back(make_pair(a, b));
18     }
19     sort(vec.begin(), vec.end());
20     int res = 0;
21     for (int i = 0; i < vec.size() - 1; ++i)
22     {
23         if (fabs((vec[i + 1].first - vec[i].first - (vec[i + 1].second + vec[i].second) / 2 - m)) < 1.0E-6)
24             ++res;
25         else if ((vec[i + 1].first - vec[i].first - (vec[i + 1].second + vec[i].second) / 2) > m)
26             res += 2;
27     }
28     if (vec[0].first + 1000 >= m)
29         ++res;
30     if (1000 - vec[vec.size() - 1].second >= m)
31         ++res;
32     cout << res;
33 }

 

13. 松雅的新旅馆

标签:abs   double   +=   位置   push   str   style   坐标轴   out   

原文地址:https://www.cnblogs.com/sunbines/p/12858375.html

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