日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

题目1005:Graduate Admission(结构体排序)

發布時間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 题目1005:Graduate Admission(结构体排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題來源

  http://ac.jobdu.com/problem.php?pid=1005

問題描述

  這道題理解題意有些麻煩,多看幾遍先理解題意再說。每個學生有自己的三個成績,一個編號,以及一個志愿列表。每個學校有自己的招生人數限制。按要求輸出每所學校最后的招生情況。

問題分析

  我們按照題目要求一個一個來。使用兩個結構體分別為Student和School。

typedef struct Student{int id;int GE;int GI;double Final;int choice[6]; }Student; typedef struct School{int now;//已招人數int Max;//最大人數 vector admit; }School;

  把所有的信息輸入之后,對學生進行排序,需要重寫sort函數的比較函數。
  在錄取過程中,所限判斷已錄取人數和最大錄取人數,如果都是0,那別錄了直接break。(這是個坑點)
  如果人沒錄滿,那么就錄吧,如果已經錄滿,那么拿出前一個錄取人的信息進行比較,相同也可以錄進去。
  另外一個坑點在于輸出格式,最后不能有空格哦~

參考代碼

參考代碼:

// // Created by AlvinZH on 2017/4/27. // Copyright (c) AlvinZH. All rights reserved. // #include <iostream> #include <cstdio> #include <cmath> #include <vector> #include <algorithm> using namespace std;int n,m,k; typedef struct Student{int id;int GE;int GI;double Final;int choice[6]; }Student; typedef struct School{int now;//已招人數int Max;//最大人數vector<int> admit; }School;Student Stu[40005]; School Sch[105];bool cmp(Student a,Student b) {if(a.Final!=b.Final) return a.Final>b.Final;else return a.GE>b.GE; }int main() {while(~scanf("%d%d%d",&n,&m,&k)){for(int i=0;i<m;i++){scanf("%d",&Sch[i].Max);Sch[i].now=0;Sch[i].admit.clear();}for(int i=0;i<n;i++){Stu[i].id=i;scanf("%d %d",&Stu[i].GE,&Stu[i].GI);Stu[i].Final=(Stu[i].GE+Stu[i].GI)/2;for(int j=0;j<k;j++)scanf("%d",&Stu[i].choice[j]);}sort(Stu,Stu+n,cmp);for(int i=0;i<n;i++){for(int j=0;j<k;j++){int quota=Stu[i].choice[j];if(Sch[quota].now==0&&Sch[quota].Max==0) break;else if(Sch[quota].now<Sch[quota].Max){Sch[quota].now++;Sch[quota].admit.push_back(i);break;//已錄取,退出 }else{int lastone=Sch[quota].admit[Sch[quota].now-1];if(Stu[lastone].GE==Stu[i].GE&&Stu[lastone].GI==Stu[i].GI){Sch[quota].now++;Sch[quota].admit.push_back(i);break;//已錄取,退出 }}}}for(int i=0;i<m;i++)//實際ID還原for(int j=0;j<Sch[i].now;j++)Sch[i].admit[j]=Stu[Sch[i].admit[j]].id;for(int i=0;i<m;i++){if(Sch[i].now==0) printf("\n");else if(Sch[i].now==1) printf("%d\n",Sch[i].admit[0]);else{sort(Sch[i].admit.begin(),Sch[i].admit.end());int flag = 1;for(int j=0;j<Sch[i].now;j++){if(flag) flag=0;else printf(" ");printf("%d",Sch[i].admit[j]);}printf("\n");}}} }

?

作者:?AlvinZH

出處:?http://www.cnblogs.com/AlvinZH/

本人Github:https://github.com/Pacsiy/JobDu

本文版權歸作者AlvinZH和博客園所有,歡迎轉載和商用,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.

轉載于:https://www.cnblogs.com/AlvinZH/p/6771713.html

總結

以上是生活随笔為你收集整理的题目1005:Graduate Admission(结构体排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。