【杭电】[5499]SDOI

来源:互联网 发布:厦门小青柑普茶淘宝 编辑:程序博客网 时间:2024/05/23 15:53

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

这题竟然没传……
好吧~
从这次周练开始体会到了难度
体会到了智商不够 -.-
是时候进入真正的学习记录时期了

这一题思路是先求出来它实际的积分值

然后需要输出的题意是

如果有女生参赛 则至少要有一名女生入选
如果没有女生参赛 则选最高的m名男生

需要注意的是
输出总是按照实际积分排序从大到小

然后需要注意的是
值为0时
有的程序写法会出错

#include<stdio.h>#include<string.h>#include <algorithm>using namespace std;struct ol {    char name[25];    char xing[10];    double r1,r2,m;};bool vs(ol A,ol B) {    return A.m>B.m;}int main() {    int T;    int i,j,n,m;    double q,max;    struct ol a[100];    scanf("%d",&T);    while(T--) {        scanf("%d %d",&n,&m);        for(i=0; i<n; i++)            scanf("%s %s %lf %lf",&a[i].name,&a[i].xing,&a[i].r1,&a[i].r2);        printf("The member list of Shandong team is as follows:\n");        if(!m)            continue;        for(i=max=0; i<n; i++) {            if(max<a[i].r1)                max=a[i].r1;        }        q=300.0/max;        for(i=0; i<n; i++) {            a[i].r1*=q;        }        for(i=max=0; i<n; i++) {            if(max<a[i].r2)                max=a[i].r2;        }        q=300.0/max;        for(i=0; i<n; i++) {            a[i].r2*=q;        }        for(i=0; i<n; i++) {            a[i].m=a[i].r1*0.3+a[i].r2*0.7;        }        sort(a,a+n,vs);        for(i=0; i<m; i++) {            if(!strcmp(a[i].xing,"female"))                break;        }        if(i<m) {            for(i=0; i<m; i++)                printf("%s\n",a[i].name);        } else {            for(i=m; i<n; i++) {                if(!strcmp(a[i].xing,"female")) {                    break;                }            }            if(i<n) {                for(j=0; j<m-1; j++)                    printf("%s\n",a[j].name);                printf("%s\n",a[i].name);            } else {                for(i=0; i<m; i++)                    printf("%s\n",a[i].name);            }        }    }    return 0;}

题目地址:【杭电】[5499]SDOI

0 0
原创粉丝点击