PAT A 1080 Graduate Admission (30分)

pat A级1080题解

题目

题目大意:
第一行输入学生人数N、学校数M、学生可报考数K。
第二行输入M个学校的招收人数。
接下来N行输入学生的笔试成绩GE、面试成绩GI,K个报考院校。
题目要求先按学生总成绩(GE+GI)/2对学生降序排序,如果总成绩相等则按照GE降序排序,如果两者相同则排名相同,学校的录取方式有两种:
1、学校未招收满,则在排序好的未录取学生中按降序录取
2、学校招收满了,则判断学生的排名是否与最后招收学生排名相等,如果排名相等额外录取。

输出:
输出每一个学校的招收情况,若一个学生也没有则输出空行。

input:
11 6 3
2 1 2 2 2 3
100 100 0 1 2
60 60 2 3 5
100 90 0 3 4
90 100 1 2 0
90 90 5 1 3
80 90 1 0 2
80 80 0 1 2
80 80 0 1 2
80 70 1 3 2
70 80 1 2 3
100 100 0 2 4``

output:
0 10
3
5 6 7
2 8

1 4

题解

一个结构体排序的基础题,cmp函数:


```cpp
int cmp(student a,student b){
if(a.sum!=b.sum)return a.sum>b.sum;
else return a.ge>b.ge;
}

第一次写时1、2用例点过不去,提示格式错误,想到了我输出空格是:


```cpp
for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(sch[i].stulist[j]){
                       // printf("i:%d j:%d stulist:%d",i,j,sch[i].stulist[j]);
                       printf("%d",j);
                    if(!j)printf(" ");
                    }
                }
                printf("\n");
        }

这里的空格输出考虑欠缺,因为空格的输出是和学校录取学生数相等的,因此我在学校结构体里增加了录取学生数:

struct school{
int stuCount;
int blankCount=-1;
int lastRank=-1;
bool stulist[40001]={false};
}sch[101];

然后在按照blankCount的数量来输出空格:

for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(sch[i].stulist[j]){
                       // printf("i:%d j:%d stulist:%d",i,j,sch[i].stulist[j]);
                       printf("%d",j);
                    if(sch[i].blankCount--)printf(" ");
                    }
                }
                printf("\n");
        }

最后献上代码和思路:

#include<bits/stdc++.h>
#include<math.h>
using namespace std;
struct student{
int id;
int ge,gi;
double sum;
int aim[6];//目标院校
int rank;
bool isAdmitted=false;//录取状态
}stu[40001];

struct school{
int stuCount;
int blankCount=-1;
int lastRank=-1;
bool stulist[40001]={false};
}sch[101];

int cmp(student a,student b){
if(a.sum!=b.sum)return a.sum>b.sum;
else return a.ge>b.ge;
}
int main()
{
    int n,m,k;
    cin>>n>>m>>k;
    for(int i=0;i<m;i++)
        cin>>sch[i].stuCount;

        for(int i=0;i<n;i++){
            cin>>stu[i].ge>>stu[i].gi;
            stu[i].sum=(stu[i].ge+stu[i].gi)/2.0;
            stu[i].id=i;
            for(int j=0;j<k;j++)cin>>stu[i].aim[j];
        }

        sort(stu,stu+n,cmp);

        stu[0].rank=0;
        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;
        }

        for(int i=0;i<n;i++){
            for(int j=0;j<k;j++){
                if(!stu[i].isAdmitted && (sch[stu[i].aim[j]].stuCount>0  || stu[i].rank==sch[stu[i].aim[j]].lastRank)){//该学生没被录取并且学校未录满或该学生排名和学校最后一名相等时进行录取
                    sch[stu[i].aim[j]].stuCount--;
                    sch[stu[i].aim[j]].blankCount++;//录取学生数+1
                    sch[stu[i].aim[j]].lastRank=stu[i].rank;//此时学生已经排完序,保证最后排名为最低
                    sch[stu[i].aim[j]].stulist[stu[i].id]=true;//将该学生存入学校里
                    stu[i].isAdmitted=true;//表示该学生已被录取
                }
            }
        }

        int acount;
        for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    if(sch[i].stulist[j]){
                       printf("%d",j);
                    if(sch[i].blankCount--)printf(" ");//blankCount控制空格数量
                    }
                }
                printf("\n");
        }


        /* 这组测试数据应该输出5空行
5 5 3
0 0 0 5 5
100 100 0 1 2
100 99 1 2 0
99 100 2 1 0
99 99 1 0 2
98 98 2 0 1
        */
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
基于Kubernetes的k3d集群可以使用admission webhook来验证和修改资源对象。下面是一个简单的k3d admission webhook的演示: 1. 创建一个名为`validating-webhook.yaml`的文件,内容如下: ```yaml apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration metadata: name: example.k3d.local webhooks: - name: example.k3d.local clientConfig: service: name: example.k3d.local namespace: default path: "/validate" caBundle: "" rules: - apiGroups: - "" - "extensions" - "apps" apiVersions: - "v1" - "v1beta1" - "v1beta2" operations: - CREATE - UPDATE resources: - "pods" - "deployments" - "replicasets" failurePolicy: Fail sideEffects: None admissionReviewVersions: - v1 - v1beta1 ``` 这个文件定义了一个名为`example.k3d.local`的验证webhook,它将验证和修改`pods`、`deployments`和`replicasets`资源对象。 2. 创建一个名为`deployment.yaml`的文件,内容如下: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ``` 这个文件定义了一个名为`nginx-deployment`的Deployment对象,它将创建3个Nginx容器。 3. 创建一个名为`Dockerfile`的文件,内容如下: ```dockerfile FROM python:3.7-alpine RUN pip install flask COPY app.py /app.py CMD ["python", "/app.py"] ``` 这个文件定义了一个基于Python 3.7的Docker镜像,它将安装Flask并运行一个名为`app.py`的应用程序。 4. 创建一个名为`app.py`的文件,内容如下: ```python from flask import Flask, request, jsonify import json app = Flask(__name__) @app.route('/validate', methods=['POST']) def validate(): admission_review = request.get_json() resource = admission_review['request']['object'] if resource['kind'] == 'Deployment': if resource['metadata']['name'] != 'nginx-deployment': return jsonify({'response': {'allowed': False, 'status': {'reason': 'Name is not nginx-deployment'}}}) return jsonify({'response': {'allowed': True}}) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080) ``` 这个文件定义了一个Flask应用程序,它将验证`Deployment`对象的名称是否为`nginx-deployment`。 5. 构建Docker镜像: ```shell docker build -t k3d-admission . ``` 6. 创建一个名为`k3d-cluster.yaml`的文件,内容如下: ```yaml apiVersion: k3d.io/v1alpha2 kind: Cluster nodes: 1 name: k3d-admission ports: - port: 8080:8080 protocol: TCP image: rancher/k3s:v1.20.4-k3s1 wait: true ``` 这个文件定义了一个名为`k3d-admission`的k3d集群,它将暴露端口8080以便验证webhook服务可以访问。 7. 创建k3d集群: ```shell k3d cluster create -f k3d-cluster.yaml ``` 8. 部署验证webhook服务: ```shell kubectl apply -f validating-webhook.yaml kubectl apply -f deployment.yaml ``` 9. 验证验证webhook服务是否工作: ```shell kubectl create deployment nginx --image=nginx:1.14.2 ``` 这个命令将创建一个名为`nginx`的Deployment对象,但是由于它的名称不是`nginx-deployment`,验证webhook服务将拒绝它的创建。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值