每次加盘子时候 ,算i~n圆盘的重心坐标  ,看是否该重心在下面圆盘i-1里面
注意临界情况,题意是临界不平衡
#include<math.h>
#include
<string.h>

#include 
<stdio.h>


double x[1000],y[1000],r[1000];

int k;
int n;

double centre[1000][2];
double weight[1000];

void weig(int i)
{
    weight[i]
=r[i]*r[i]*acos(-1);

    
for(int j=i-1;j>=0;j--)
    
{
        weight[j]
=weight[j+1]+r[j]*r[j]*acos(-1);
        weight[j]
=weight[j+1]+r[j]*r[j]*acos(-1);
    }

}


void cent(int i)
{
    centre[i][
0]=x[i];
    centre[i][
1]=y[i];
    
for(int j=i-1;j>=0;j--)
    
{
        centre[j][
0]=(centre[j+1][0]*weight[j+1]+r[j]*r[j]*acos(-1)*x[j])/(weight[j+1]+r[j]*r[j]*acos(-1));
        centre[j][
1]=(centre[j+1][1]*weight[j+1]+r[j]*r[j]*acos(-1)*y[j])/(weight[j+1]+r[j]*r[j]*acos(-1));
    }

}


double distance(double x1,double y1,double x2,double y2)
{
    
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}


bool func(int i)
{
    
for(int j=1;j<=i;j++)
    
{
        
if(distance(centre[j][0],centre[j][1],x[j-1],y[j-1])>=r[j-1])
        
{
            
return 0;
        }

    }

    
return 1;
}



int main()
{

    
while(scanf("%d",&n)!=EOF)
    
{
        
if(n==0)
            
break;
        k
=n;
        memset(x,
0,sizeof(x));
        memset(y,
0,sizeof(y));
        memset(r,
0,sizeof(r));
        memset(weight,
0,sizeof(weight));
        memset(centre,
0,sizeof(centre));
        
int i;
        
for(i=0;i<n;i++)
        
{
            scanf(
"%lf%lf%lf",&x[i],&y[i],&r[i]);
            
if(k==n)
            
{
                weig(i);    
                cent(i);
                
if(!func(i))
                
{
                    k
=i;
                }

            }

        }


        
if(k>=n)
            printf(
"Feasible\n");
        
else
            printf(
"Unfeasible %d\n",k);
    }

    
return 0;
}