10167 - Birthday Cake

来源:岁月联盟 编辑:exp 时间:2012-11-03
[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;