题目链接:http://codeforces.com/problemset/problem/15/A
View Code
题意:在x轴已经盖了n座房子(房子是正方形,且中心在x轴)。房子边长平行坐标轴,房子之间不能重叠,但可以相邻(共用一条边)。给出边长和中心所在位置,问要再盖一座边长为t房子,并且要与其他房子相邻,还有几个可能的位置。
思路:暴力,就考虑在每两个房子之间盖房子和在最边界两个。(我的做法就直接标记已经被占得地方,然后看房子两边能不能盖)。要注意两个房子中间距离恰好是t时只能盖一座,>t可以两座。
因为他给的坐标是中间点的位置,若是边长是奇数就不大好处理,所以我把边长都扩大了两倍,这样可以避免0.5的出现。
代码:
![](https://i-blog.csdnimg.cn/blog_migrate/cdec0645add3fc3c328197dda5c76203.gif)
int main() { int n,t,a,s,mx=-1001,mn=1001,tt,aa,bb; map<int,int>vis; scanf("%d%d",&n,&t); for(int i=0;i<n;i++) { scanf("%d%d",&a,&tt); aa=a*2-tt; bb=a*2+tt; for(int j=aa;j<=bb;j++) { vis[j]=1; if(j>mx) mx=j; if(j<mn) mn=j; } } t*=2; int tx=0,sum=0; for(int i=mn;i<=mx;i++) { if(vis[i]==0) { tx++; } else { tx++; if(tx>t) sum+=2; else if(tx==t) sum++; tx=0; } } if(tx>t) sum+=2; else if(tx==t) sum++; t=0; sum+=2; printf("%d\n",sum); }