训练赛第二场E题 Cottage Village

题目大意:在一条X轴上,有若干个正方形,并且保证这些正方形的中心都在X轴上,然后输入n个正方形的中心的X坐标,和正方形的边长,现在要再插入一个正方形,要求是,新插入的正方形至少要有一条边与原来的正方形的一条边重合,然后输入新插入的正方形的边长,问一共有多少种插入的方法。

解题报告:模拟题,我的做法是用一个结构体保存每个正方形的中心的X坐标和正方形的边长,然后再把所有的正方形按照中心的X坐标从小到大排一次序,然后从前往后扫描一遍,当两个相邻的正方形之间的距离大于要插入的正方形的边长的时候,说明在这个位置可以有两种插入的方法,当相邻的正方形之间的距离等于要插入的正方形的的边长时,说明在这个位置只有一种插入的方法,然后第一个正方形的左边跟最后一个正方形的右边分别一定有一种插入的方法,这样就可以了。

 

 

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 struct node
 7 {
 8     double s,t;
 9 }A[1005];
10 
11 bool cmp(node a,node b)
12 {
13     return a.s < b.s;
14 }
15 
16 int main()
17 {
18     int n;
19     double t;
20     while(scanf("%d%lf",&n,&t)!=EOF)
21     {
22         for(int i = 0;i < n;++i)
23         scanf("%lf%lf",&A[i].s,&A[i].t);
24         sort(A,A+n,cmp);
25         int ans = 2;
26         for(int i = 0;i < n - 1;++i)
27         {
28             double kuan = A[i+1].s - A[i+1].t / 2.0 - (A[i].s + A[i].t/2.0);
29             if(kuan > t) ans += 2;
30             else if(kuan == t) ans++;
31         }
32         printf("%d\n",ans);
33     }
34     return 0;
35 }
View Code

 

posted @ 2013-11-01 23:51  xiaxiaosheng  阅读(214)  评论(0编辑  收藏  举报