【问题描述】
松雅终于确定了新建旅馆的城市,她看中了该城市临海一条笔直的街道,此处风景优美,街道另一边是海滩,不允许有任何建筑。
不妨将该街道视作为一条坐标轴(x-轴),街道上已有 n 座方形建筑,它们的边平行于 x 轴,其中的一条横边的位于坐标轴上,其中心点为整数坐标。这些房子不会交叠,但可以相互挨着。
松雅所建的旅馆的横边长为 t,并且至少与一座已有的建筑相互挨着,这样她可以节省一些建设费用,当然,这座建筑的一条横边必须位于 x 轴上,房子不能交叠。
给出所有已有的建筑的中心点和横边长(忽略建筑墙体的厚度),请你帮她找出可以新建旅馆的位置有多少?
【输入形式】
输入的第一行为两个正整数 n 和 t( n、t ≤ 1000),分别该街道上已有的建筑数量以及她所建旅馆的横边长。
接下来的 n 行,每行两个整数 xi 和 ai,分别表示每座已有建筑位于坐标轴上的横边的中心点和横边长,其中,-20000 ≤ xi ≤20000,1≤ ai ≤1000。
【输出形式】
请输出可以新建旅馆的可能的位置的数量。
#include<cmath>//abs()取绝对值
using namespace std;
int main()
{
int n=0;//已有建筑数量
int t=0;//旅馆的边长
int sum=0;
cin>>n>>t;
int x[n];//已有建筑的边长中心点
int a[n];//已有建筑的边长
for(int i=0;i<n;i++)
{
cin>>x[i];
cin>>a[i];
}
for(int i=0;i<n;i++)
{
int j=0;//定义相邻两已知建筑之间的距离
j=abs(x[i+1]-x[i]);
int h=0;//定义相邻两已知建筑边长之和的一半
h=(a[i]/2+a[i+1]/2);
if((j-h)>=2*t)
sum=sum+2;
if((j-h)>t&&(j-h)<2*t)
sum=sum+2;
if((j-h)==t)
sum=sum+1;
else sum=sum+0;
}
cout<<sum<<endl;
return 0;
}