8.7

发布时间 2023-08-07 20:02:00作者: 徐星凯
#include <bits/stdc++.h> 
using namespace std;

vector<int> vec[100000];//存关系图 
bool vis[100000];//标记五服以内的亲属 
char sex[100000];//记录性别 
bool flag;//标记情侣是否为近亲 

void Dfs(int x,int num)//num表示第几代,从0开始 
{
    if(num>=4) return;  //超过五代直接退出 
    for(int i=0;i<vec[x].size();i++){
        if(!vis[vec[x][i]]){
            vis[vec[x][i]]=1;//标记出现的人 
            Dfs(vec[x][i],num+1); 
        }
        else flag=1;//五服之内出现一样的人 
    }
}
int main() 
{
    int T;
    cin>>T;
    while(T--){
        int t,fa,ma;
        char ch;
        cin>>t>>ch>>fa>>ma;
        sex[t]=ch;
        if(fa!=-1){ //-1不用保存,避免数据处理不当导致数组越界 
            vec[t].push_back(fa);//保存双亲 
            sex[fa]='M';//记录父亲性别 
        }
        if(ma!=-1){
            vec[t].push_back(ma);
            sex[ma]='F';
        }
    }
    cin>>T;
    while(T--){
        int x,y;
        cin>>x>>y; 
        if(sex[x]==sex[y]) cout<<"Never Mind"<<endl; //同性 
        else{
            memset(vis,0,sizeof(vis)); 
            vis[x]=1;  
            vis[y]=1;
            flag=0;
            Dfs(x,0);
            Dfs(y,0);
            if(flag)//被标记过说明这两人为近亲 
                cout<<"No"<<endl;
            else
                cout<<"Yes"<<endl;
        }
    }
    return 0;
}
#include<stdio.h>
#include<stdlib.h>

struct Student
{
    int Scores[100];
    double Average;
}stu[10005];
int StuNum,JudgeNum,OutNum;
double SortScores[10005];

void GetMaxScore(){
    long int sum;
    //每个学生评委打分排序
    for(int k=0;k<StuNum;k++){
        int t;
           for (int i = 0; i <JudgeNum; i++)
           {
            for (int j = 0; j < JudgeNum-1; j++)
              {
                   if (stu[k].Scores[j] > stu[k].Scores[j + 1])
                   {
                    t = stu[k].Scores[j+1];
                    stu[k].Scores[j + 1] = stu[k].Scores[j];
                    stu[k].Scores[j] = t;
                }
            }
        }
    }
    //求去最高,最低分后的,平均值
    for(int c=0;c<StuNum;c++){
        sum=0;
        for(int i=1;i<JudgeNum-1;i++){
            sum+=stu[c].Scores[i];
        }
        SortScores[c]=stu[c].Average=sum*1.0/(JudgeNum-2);
    }
    //平均值排序,用两个排序是因为两次排序的数值类型不同
    double t;
    for (int i = 0; i <StuNum; i++)
    {
        for (int j = 0; j < StuNum-1; j++)
        {
            if (SortScores[j] > SortScores[j + 1])
            {
                t = SortScores[j+1];
                SortScores[j + 1] = SortScores[j];
                SortScores[j] = t;
            }
        }
    }
}
int main()
{
    int i;
    scanf("%d %d %d",&StuNum,&JudgeNum,&OutNum);
    for(i=0;i<StuNum;i++){
        for(int j=0;j<JudgeNum;j++){
            scanf("%d",&stu[i].Scores[j]);
        }
    }  
    GetMaxScore();
    
    for(i=StuNum-OutNum;i<StuNum-1;i++)//用来输出最后一个没有空格
        printf("%.3f ",SortScores[i]);
    printf("%.3f",SortScores[i]);
}