天神下凡

北城余情 提交于 2020-03-17 06:15:23

背景
Czy 找到宝藏获得屠龙宝刀和神秘秘籍!现在他要去找经常ntr 他的Jmars 报仇……
题目描述
Czy 学会了一招“堕天一击”,他对一个地点发动堕天一击,地面上就会留下一个很
大的圆坑。圆坑的周围一圈能量太过庞大,因此无法通过。所以每次czy 发动技能都会把
地面分割。Jmars 拥有好大好大的土地,几十眼都望不到头,所以可以假设土地的大小是
无限大。现在czy 对他发动了猛烈的攻击,他想知道在泽宇攻击之后他的土地被切成几份
了?
Czy 毕竟很虚,因此圆心都在x 坐标轴上。另外,保证所有圆两两之间不会相交。
格式
输入第一行为整数n,表示czy 放了n 次堕天一击。
接下来n 行,每行两个整数x[i],r[i]。表示在坐标(x[i] , 0)放了一次堕天一击,半
径为r[i]。
输出一行,表示地面被分割成几块。
样例输入
4
7 5
-9 11
11 9
0 20
样例输出
6
数据范围
对于30%数据,n<=5000
对于100%数据,1<=n<=300000,-10^9<=x[i]<=10^9,1<=r[i]<=10^9.

 

solution:

 

这道题我打的真是暴力,A了.........

 

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<vector>
 7 #include<queue>
 8 #define ll long long
 9 #define mem(a,b) memset(a,b,sizeof(a))
10 #define dd double
11 using namespace std;
12 const int N=300005;
13 /*int read()
14 {
15     int ans=0;char q=getchar();
16     while(q<'0'||q>'9')q=getchar();
17     while(q>='0'&&q<='9'){ans=ans*10+q-'0';q=getchar();}
18     return ans;
19 }*/
20 struct son
21 {
22     int l,r;
23 };
24 son ji[N];
25 
26 bool ok(son a,son b)
27 {
28     if(a.l==b.l)return a.r>b.r;
29     return a.l<b.l;
30 }
31 
32 int n,ans;
33 int u,o;
34 
35 void out11()
36 {
37     printf("\n\n");
38     for(int i=1;i<=n;++i)
39       printf("%d %d\n",ji[i].l,ji[i].r);
40     printf("\n\n");
41 }
42 
43 int main(){
44     //freopen("god.in","r",stdin);
45     //freopen("god.out","w",stdout);
46     cin>>n;
47     for(int i=1;i<=n;++i)
48     {
49         //u=read();o=read();
50         cin>>u>>o;
51         ji[i].l=u-o;
52         ji[i].r=u+o;
53     }
54     
55     //out11();
56     
57     sort(ji+1,ji+1+n,ok);
58     
59     //out11();
60     
61     ans=1;
62     
63     
64     //printf("sss%d %d\n",ji[1].l,ji[1].r);
65     //printf("sss%d %d\n",ji[2].l,ji[2].r);
66     
67     for(int i=1;i<=n;++i)
68     {
69         if(i!=n&&ji[i+1].l==ji[i].l)
70         {
71             //cout<<"sdsd"<<endl;
72             //printf("i=%d\n",i);
73             int l1=ji[i].l,r1=ji[i+1].r;
74             for(int j=i+2;j<=n;++j)
75             {
76                 //printf("l1=%d r1=%d\n",l1,r1);
77                 if(ji[j].l==r1&&ji[j].r<=ji[i].r)
78                 {l1=ji[j].l;r1=ji[j].r;}
79                 
80                 if(r1==ji[i].r)
81                 {
82                   ++ans;
83                   
84                   break;
85                 }
86             }
87         }
88         ++ans;
89     }
90     
91     printf("%d",ans);
92     //while(1);
93     return 0;
94 }
暴力

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!