pan.baidu.com/s/1sl1Vy6T 8qpi
#include<iostream>
#include<math.h>
using namespace std;
double Cope(int num,int w,int h)
{
if(2*num<=h) return 0.0;
else return sqrt(double(num*num-h*h/4));
}
int sort(double **a,double **b,int num,bool *visit)
{
double temp1=0,temp2=0;
int result=num;
bool tag=false;
for(int i=0;i<num;i++)
{
for(int j=num-2;j>=i;j--)
{
if(a[j+1][0]<a[j][0]){
temp1=a[j+1][0];
temp2=a[j+1][1];
a[j+1][0]=a[j][0];
a[j+1][1]=a[j][1];
a[j][0]=temp1;
a[j][1]=temp2;
}
}
}
int ii=0,kk=1;
while(ii<num)
{
kk=1;
while(ii+kk<num)
{
if(a[ii][0]==a[ii+kk][0]&&!visit[ii]){
if(a[ii][1]>=a[ii+kk][1])
{
result--;
visit[ii+kk]=true;
}
else{
result--;
visit[ii]=true;
}
}
else if(a[ii][1]>=a[ii+kk][1]&&!visit[ii+kk])
{
result--;
visit[ii+kk]=true;
}
kk++;
}
ii++;
}
kk=0;
for(int i=0;i<num;i++)//~
{
if(!visit[i]){
b[kk][0]=a[i][0];
b[kk][1]=a[i][1];
kk++;
}
}
for(int k=1;k<result;k++)
{
int j=0;
for(j=0;j<result;j++){
if(b[k][0]<=b[j][1]&&b[j][1]<=b[k][1]&&j!=k)
{
break;
}
j++;
}
if(j==result)
{
tag=true;
break;
}
}
if(tag)
{
return 0;
}
return result;
}
int main()
{
int n=0,m=0;
cin>>n;
int *a=new int[n];
int *w=new int[n];
int *h=new int[n];
int *r=NULL;
int *x=NULL;
bool *visit=NULL;
double **lr=NULL;
double l=0;
for(int i=0;i<n;i++){
cin>>a[i]>>w[i]>>h[i];
lr=new double*[a[i]];
r=new int[a[i]];
x=new int[a[i]];
visit=new bool[a[i]];
for(int j=0;j<a[i];j++)
{
cin>>x[j];
cin>>r[j];
visit[j]=false;
lr[j]=new double[2];
l=Cope(r[j],w[i],h[i]);
lr[j][0]=x[j]-l>=0?x[j]-l:0;
lr[j][1]=x[j]+l<=w[i]?x[j]+l:w[i];
}
m=sort(lr,lr,a[i],visit);
cout<<m<<endl;
}
delete[]a;
delete[]w;
delete[]h;
delete[]lr;
delete[]visit;
delete[]x;
delete[]r;
return 0;
}
aa
最新推荐文章于 2023-08-23 21:36:22 发布