天神下凡
背景
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 }