题意简单。
由于没有注意到椭圆不一定是在圆心。。贡献无数的wa。。。。。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#include<math.h>
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<b.id;
}
double dis( double x1,double y1,double x2,double y2 ){
return ( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) );
}
bool InCir( Node aim,int ID ){
double dd = dis( aim.x,aim.y,c1[ID].x,c1[ID].y );
if( dd<=c1[ID].r*c1[ID].r ) return true;
else return false;
}
bool InCir2( Node aim,int ID ){
double dd = (aim.x-c2[ID].x)*(aim.x-c2[ID].x)/(c2[ID].a*c2[ID].a)+(aim.y-c2[ID].y)*(aim.y-c2[ID].y)/(c2[ID].b*c2[ID].b);
if( dd<=1.0 ) return true;
else return false;
}
int D( double x ){
return x<-eps?-1:x>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<n&&s[0]|s[2];i++ ){
s[ D(det(pnt[i],pnt[i+1],q))+1 ] = 0;
}
return s[0]|s[2];
}
int InPloy2( 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<n&&s[1]&&s[0]|s[2];i++ ){
s[ D(det(pnt[i],pnt[i+1],q))+1 ] = 0;
}
return s[1]&&s[0]|s[2];
}
void init(){
for( int i=0;i<maxn;i++ )
p[i].sum = 0;
}
void test( int n ){
for( int i=1;i<=n;i++ ){
printf("name = %s, sum = %d\n",p[i].name,p[i].sum);
}
}
int main(){
int T;
scanf("%d",&T);
int Case = 1;
while( T-- ){
int n,m;
scanf("%d",&m);
init();
char str[ 55 ];
for( int i=1;i<=m;i++ ){
scanf("%s",str);
if( str[0]=='C' ){
od[ i ] = 1;
scanf("%lf%lf%lf%d",&c1[ i ].x,&c1[ i ].y,&c1[ i ].r,&c1[ i ].val);
}
else if( str[0]=='E' ){
od[ i ] = 2;
scanf("%lf%lf%lf%lf%d",&c2[ i ].x,&c2[ i ].y,&c2[ i ].a,&c2[ i ].b,&c2[ i ].val);
}
else {
od[ i ] = 3;
int cc;
scanf("%d",&cc);
for( int j=0;j<cc;j++ ){
scanf("%lf%lf",&ploy[i].pnt[j].x,&ploy[i].pnt[j].y);
}
ploy[i].cnt = cc;
scanf("%d",&ploy[i].val);
}
}
scanf("%d",&n);
for( int i=1;i<=n;i++ ){
scanf("%s%s%lf%lf",p[i].name,p[i].nation,&p[i].x,&p[i].y);
//p[i].sum = 0;
p[i].id = i;
}
for( int i=1;i<=n;i++ ){
for( int j=1;j<=m;j++ ){
if( od[j]==1&&InCir( p[i],j )==true ){
p[i].sum += c1[j].val;
}
else if( od[j]==2&&InCir2( p[i],j )==true ){
p[i].sum += c2[j].val;
}
else if( od[j]==3&&(InPloy1( ploy[j].cnt,p[i].x,p[i].y,ploy[j].pnt )||InPloy2( ploy[j].cnt,p[i].x,p[i].y,ploy[j].pnt )) ){
p[i].sum += ploy[j].val;
}
}
}
sort( p+1,p+1+n,cmp );
//test( n );
printf("Case %d:\n",Case ++ );
int Gold = 0;
if( p[1].sum<=0 ) continue;
int flag = 1;
for( int i=1;i<=n;i++ ){
if( p[i].sum==p[1].sum&&p[1].sum>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;
}
分享到:
相关推荐
2. combinations获取所有的组合情况,permutations可以获取所有的排列情况 3. 限制时间范围 4. 转化为字符型
FZU 2196 --- double bfs 6. PKU 1426 --- bfs + pruning 7. BNU 1038 --- dfs transform 8. PKU 1562 --- dfs transform 9. HDU 1253 --- basic bfs 10. PKU 3126 --- bfs + complicate date deal 11. BNU 1054 ---...
今天完成题目:398print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数a=[1,
福州大学信息安全修读资源库 本库就如名称所言,原来是福州大学2018级信息安全专业居住于1#404宿舍的学生自有库,我们收集整理了就读了于此所有的代码作业和各类实验,还有各种资源,本来是合理的我们内部自己学习...
该标题表明了问题的主题是字符串题目记录,可能来自于不同的 OJ 平台,如 POJ、HDU、SPOJ、SGU、HUST 和 FZU 等。 描述:上面可能有 POJ 的题目,HDU 的题目,SPOJ 的题目,SGU 的题目,HUST 上的题目,FZU 上的...
对于想要掌握这门技能的人来说,参加在线编程评测,如fzu online judge,是一个行之有效的途径。fzu online judge是一个面向编程爱好者和学习者的平台,提供了丰富的算法题目,供用户在线解答。这些题目虽然难度不一...
求最大乘积 的源代码 次题是fzu 4月月赛题 是一道数学题啊
FZU ACM 2025寒假集训 1.21-1.23
本文使用typs编写,可以到https://github.com/FZU-psz/easy-py领取源码,可以的话点个star
不要下载此版的,请下载最新的http://download.csdn.net/source/1664620 离线版的福大acm在线评测OJ系统题目 更新到2009年8月 (注:chm电子书格式化)
根据给定的文件标题“ACM数学_FZU绝密资料”及描述“ACM数学_FZU...............绝密..........”,我们可以看出这份资料主要聚焦于数学在ACM竞赛中的应用,尤其是在解决算法问题时数学理论的重要性。下面我们将从...
从给定文件的内容中,我们可以提取以下计算机视觉和机器学习的知识点: 1. **MNIST手写数字数据库**: 这是一个非常著名的用于计算机视觉和机器学习研究的手写数字图像集合。它包含了成千上万的灰度图,每个图像是28...
"FZU软件工程web课程复习资料-整理" 本资源是FZU软件工程web课程的复习资料,涵盖了web开发的基础知识和技术。下面是对该资源中所涉及的知识点的详细解释: 第一讲 web 开发概述 1. 因特网与万维网 因特网是一种...
FZU软件工程操作系统课程复习资料-整理 本资源摘要信息是关于FZU软件工程操作系统课程复习资料的整理,涵盖操作系统的基本概念、进程和线程、存储管理和文件系统等方面的知识点。 一、操作系统的定义和主要功能 ...
matlab的登录代码下载 ZJU-toolkit 一些登录浙大通行证以后可以查看到的信息,just for fun. 目前实现的一些小功能 登录浙大通行证 分别实现了web端的登录和钉钉扫码登录,详见文章 蓝码生成器 ...
计算机视觉是研究如何让计算机理解和解释视觉信息,使之能够复制人类对视觉信息的处理、分析和理解能力,并做出相应的行为决策。它涉及图像采集、处理、分析和理解等多个方面,广泛应用于工业自动化、监控系统、医疗...
5. **数学知识**:组合数学、数论、几何等,常常在解决特定问题时发挥作用。 6. **字符串处理**:KMP算法、Manacher's Algorithm等,用于处理字符串匹配问题。 7. **模拟**:对实际问题进行抽象建模,编写程序来...
在计算机视觉领域中,灰度共生矩阵(GLCM)是一种用于纹理特征分析的技术。它通过计算图像中像素值的相对位置和分布来揭示图像的纹理特性,这些特性在图像分割、特征提取和图像分析等领域中非常有用。...
RTC2020_EfficientSR FZU-CS510冠军开源方案比赛链接: ://www.dcjingsai.com/v2/cmptDetail.html?id 409比赛团队(团队):FZU-CS510比赛名次及热门: 团队成员:福州大学甘敏教授团队的博士生苏建楠,帝视科技张...
fzu大数据基础实验4