PAT:1080. Graduate Admission (30) AC

本文介绍了一个基于学生高考成绩和志愿顺序进行高校招生模拟的算法。该算法首先对学生按总分和英语成绩排序,并根据学生的志愿顺序尝试将其分配到相应的学校。每所学校设有招生名额限制,若名额已满,则按排名线录取。
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

struct Student
{
  int GE,GI,sum,rank,ID;
  int prefer[6];
}STU[40066];

struct School
{
  int want;        //各学校招生人数
  int get;        //已招到的人数
  int line;        //最后一名进来的排名线
  int queue[40066];      //已投档学生编号
}SC[106];

bool cmp(Student a,Student b)
{
  if(a.sum!=b.sum)
    return a.sum>b.sum;
  else
    return a.GE>b.GE;
}

int main()
{
  memset(STU,0,sizeof(STU));
  memset(SC,0,sizeof(SC));
  int n,m,k;              //n名考生,m所学校,k个志愿
  scanf("%d%d%d",&n,&m,&k);
  for(int i=0 ; i<m ; ++i)      //输入各学校招生人数
    scanf("%d",&SC[i].want);
  for(int i=0 ; i<n ; ++i)
  {
    scanf("%d %d",&STU[i].GE, &STU[i].GI);    //填入分数
    STU[i].sum=STU[i].GE+STU[i].GI;        //填入总分
    STU[i].ID=i;                //填入编号
    for(int j=0 ; j<k ; ++j)
    {
      int tmp=-1;
      scanf("%d",&tmp);      //填入志愿
      STU[i].prefer[j]=tmp;
    }
  }
  sort(STU,STU+n,cmp);
  STU[0].rank=1;
  for(int i=1 ; i<n ; ++i)            //填入排序
  {
    if(STU[i].sum==STU[i-1].sum && STU[i].GE==STU[i-1].GE)
      STU[i].rank=STU[i-1].rank;
    else
      STU[i].rank=i+1;
  }
  //学生志愿为导向
  for(int i=0 ; i<n ; ++i)
  {
    for(int j=0 ; j<k ; ++j)      //STU[i].prefer[j]代表考生的j号志愿学校代码
    {
      if(SC[STU[i].prefer[j]].want>SC[STU[i].prefer[j]].get ||  SC[STU[i].prefer[j]].line==STU[i].rank )  //该校未招满或者已招满但考生排名和最后一个找入学生一样
      {
      SC[STU[i].prefer[j]].queue[SC[STU[i].prefer[j]].get]=STU[i].ID;        //考生i的ID入档
        ++SC[STU[i].prefer[j]].get;              //入档学生数+1
        SC[STU[i].prefer[j]].line=STU[i].rank;          //更新最后名次
    break;      //已被录取
      }
    }
  }
  //输出
  for(int i=0 ; i<m ; ++i)
  {
    sort(SC[i].queue,SC[i].queue+SC[i].get);    //最后升序排列
    for(int j=0 ; j<SC[i].get ;++j)
    {
      printf("%d",SC[i].queue[j]);
      if(j!=SC[i].get-1)
        printf(" ");
    }
    printf("\n");
  }
  return 0;
}

转载于:https://www.cnblogs.com/Evence/p/4320566.html

The Job "ingress-nginx-admission-patch" is invalid: spec.template: Invalid value: core.PodTemplateSpec{ObjectMeta:v1.ObjectMeta{Name:"ingress-nginx-admission-patch", GenerateName:"", Namespace:"", SelfLink:"", UID:"", ResourceVersion:"", Generation:0, CreationTimestamp:time.Date(1, time.January, 1, 0, 0, 0, 0, time.UTC), DeletionTimestamp:<nil>, DeletionGracePeriodSeconds:(*int64)(nil), Labels:map[string]string{"app.kubernetes.io/component":"admission-webhook", "app.kubernetes.io/instance":"ingress-nginx", "app.kubernetes.io/name":"ingress-nginx", "app.kubernetes.io/part-of":"ingress-nginx", "app.kubernetes.io/version":"1.10.0", "batch.kubernetes.io/controller-uid":"722c1709-1a80-4f61-ac36-3e5997b0ff24", "batch.kubernetes.io/job-name":"ingress-nginx-admission-patch", "controller-uid":"722c1709-1a80-4f61-ac36-3e5997b0ff24", "job-name":"ingress-nginx-admission-patch"}, Annotations:map[string]string(nil), OwnerReferences:[]v1.OwnerReference(nil), Finalizers:[]string(nil), ManagedFields:[]v1.ManagedFieldsEntry(nil)}, Spec:core.PodSpec{Volumes:[]core.Volume(nil), InitContainers:[]core.Container(nil), Containers:[]core.Container{core.Container{Name:"patch", Image:"registry.cn-hangzhou.aliyuncs.com/google_containers/kube-webhook-certgen:v1.4.0", Command:[]string(nil), Args:[]string{"patch", "--webhook-name=ingress-nginx-admission", "--namespace=$(POD_NAMESPACE)", "--patch-mutating=false", "--secret-name=ingress-nginx-admission", "--patch-failure-policy=Fail"}, WorkingDir:"", Ports:[]core.ContainerPort(nil), EnvFrom:[]core.EnvFromSource(nil), Env:[]core.EnvVar{core.EnvVar{Name:"POD_NAMESPACE", Value:"", ValueFrom:(*core.EnvVarSource)(0xc00cc95700)}}, Resources:core.ResourceRequirements{Limits:core.ResourceList(nil), Requests:core.ResourceList(nil), Claims:[]core.ResourceClaim(nil)}, ResizePolicy:[]core.ContainerResizePolicy(nil), RestartPolicy:(*core.ContainerRestartPolicy)(nil), VolumeMounts:[]core.VolumeMount(nil), VolumeDevices:[]core.VolumeDevice(nil), LivenessProbe:(*c
03-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值