标签:abs double += 位置 push str style 坐标轴 out
【问题描述】
松雅终于确定了新建旅馆的城市,她看中了该城市临海一条笔直的街道,此处风景优美,街道另一边是海滩,不允许有任何建筑。
不妨将该街道视作为一条坐标轴(x-轴),街道上已有 n 座方形建筑,它们的边平行于 x 轴,其中的一条横边的中心点位于坐标轴上,这些房子不会交叠,但可以相互挨着。
松雅所建的旅馆的横边长为 t,并且至少与一座已有的建筑相互挨着,这样她可以节省一些建设费用,当然,这座建筑的一条横边必须位于 x 轴上,房子不能交叠。
给出所有已有的建筑的中心点和横边长(忽略建筑墙体的厚度),请你帮她找出可以新建旅馆的位置有多少?
【输入形式】
输入的第一行为两个正整数 n 和 t( n、t ≤ 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 }
标签:abs double += 位置 push str style 坐标轴 out
原文地址:https://www.cnblogs.com/sunbines/p/12858375.html