[cpp]
描述:我是完全把圓邊緣的點都算出來,放到一個數組裡,然後查詢就可以了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
int num[1010][2],s[100010][2];
int main()
{
//freopen("a.txt","r",stdin);
int n,i,j;
for(i=500; i<1000; i++)
{
num[i][1]=-sqrt(250000-(i-500)*(i-500));
num[i][0]=num[1000-i][0]=i-500;
num[1000-i][1]=-num[i][1];
}
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
memset(s,0,sizeof(s));
for( i=0; i<2*n; ++i)
scanf("%d%d",&s[i][0],&s[i][1]);
int up,down;
for(j=0; j<1000; j++)
{
up=down=i=0;
while(i<2*n)
{
if(num[j][0]*s[i][0]+num[j][1]*s[i][1]==0)break;
else if(num[j][0]*s[i][0]+num[j][1]*s[i][1]>0) up++;
else down++;
i++;
}
if(i==2*n&&up==down)
{
printf("%d %d\n",num[j][0],num[j][1]);
break;
}
}
}
return 0;
}