题意简单。
由于没有注意到椭圆不一定是在圆心。。贡献无数的wa。。。。。
#include#include #include #include #include using namespace std;const int maxn = 555;const int maxm = 555;const double eps = 1e-8;struct Node{ char name[55]; char nation[55]; int sum; int id; double x,y;}p[ maxn ];struct Cir{ double r; double x,y; int val;}c1[ maxm ];struct Cir2{ double x,y; double a,b; int val;}c2[ maxm ];struct Point { double x,y;};struct Ploy{ Point pnt[ maxn ]; int cnt; int val;}ploy[ maxm ];int od[ maxm ];int cmp( Node a,Node b ){ if( a.sum!=b.sum ) return a.sum>b.sum; else return a.id eps;}double det( Point a,Point b,Point c ){ return (b.x-a.x)*(c.y-a.y)-(c.x-a.x)*(b.y-a.y);}int InPloy1( int n,double xx,double yy,Point pnt[] ){ Point q; q.x = xx,q.y = yy; int i,s[3] = {1,1,1}; pnt[n] = pnt[0]; for( int i=0;i 0 ){ printf("Gold Medal: %s from %s got %d point(s)\n",p[i].name,p[i].nation,p[i].sum); Gold ++ ; flag = i; } else break; } if( p[flag+1].sum<=0 ) continue; if( Gold>=3 ) continue; int Silver = 0; int temp = flag+1; bool f = false; for( int i=temp;i<=n;i++ ){ if( p[i].sum==p[temp].sum && p[i].sum>0 ){ flag = i; Silver ++ ; if( Gold<=1 ) printf("Silver Medal: %s from %s got %d point(s)\n",p[i].name,p[i].nation,p[i].sum); else{ f = true; printf("Bronze Medal: %s from %s got %d point(s)\n",p[i].name,p[i].nation,p[i].sum); } } else break; } if( Silver+Gold>=3||f==true ) continue; if( p[flag+1].sum<=0 ) continue; for( int i=flag+1;i<=n;i++ ){ if( p[i].sum==p[flag+1].sum&&p[i].sum>0 ){ printf("Bronze Medal: %s from %s got %d point(s)\n",p[i].name,p[i].nation,p[i].sum); } else break; } } return 0;}