首页 > 编程语言 >PAT_Advanced Level_1080 Graduate Admission(C++_模拟_快排_卡常)

PAT_Advanced Level_1080 Graduate Admission(C++_模拟_快排_卡常)

时间:2023-06-20 10:04:29浏览次数:54  
标签:school PAT 1080 int Admission rank stu num 100


It is said that in 2011, there are about 100 graduate schools ready to proceed over 40,000 applications in Zhejiang Province. It would help a lot if you could write a program to automate the admission procedure.

Each applicant will have to provide two grades: the national entrance exam grade GE, and the interview grade GI. The final grade of an applicant is (GE+GI)/2. The admission rules are:

  • The applicants are ranked according to their final grades, and will be admitted one by one from the top of the rank list.
  • If there is a tied final grade, the applicants will be ranked according to their national entrance exam grade GE. If still tied, their ranks must be the same.
  • Each applicant may have K choices and the admission will be done according to his/her choices: if according to the rank list, it is one’s turn to be admitted; and if the quota of one’s most preferred shcool is not exceeded, then one will be admitted to this school, or one’s other choices will be considered one by one in order. If one gets rejected by all of preferred schools, then this unfortunate applicant will be rejected.
  • If there is a tied rank, and if the corresponding applicants are applying to the same school, then that school must admit all the applicants with the same rank, even if its quota will be exceeded.

Input Specification:

Each input file contains one test case.

Each case starts with a line containing three positive integers: N (≤40,000), the total number of applicants; M (≤100), the total number of graduate schools; and K (≤5), the number of choices an applicant may have.

In the next line, separated by a space, there are M positive integers. The i-th integer is the quota of the i-th graduate school respectively.

Then N lines follow, each contains 2+K integers separated by a space. The first 2 integers are the applicant’s GE and GI, respectively. The next K integers represent the preferred schools. For the sake of simplicity, we assume that the schools are numbered from 0 to M−1, and the applicants are numbered from 0 to N−1.

Output Specification:

For each test case you should output the admission results for all the graduate schools. The results of each school must occupy a line, which contains the applicants’ numbers that school admits. The numbers must be in increasing order and be separated by a space. There must be no extra space at the end of each line. If no applicant is admitted by a school, you must output an empty line correspondingly.

Sample 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

Sample Output:

0 10
3
5 6 7
2 8

1 4

Process

emmm,这道题其实就是个快排问题,只要题意读懂了那么很快就能过,但是如果很不幸你也和我一样卡在了第四个测试点,那么下面有几个卡常小技巧,你值得拥有:

  • I/O流优化:ios::sync_with_stdio(0)//一旦有了这行函数,代码中就不能出现printf/scanf,只能用cin/cout;
  • int前面加register,会快很多;
  • 函数前面加inline;

Code

#include<bits/stdc++.h>
using namespace std;
int n, m, k;
struct students {
	double g, ge;
	int rank, id;
	vector<int> want;
};
struct school {
	int num;
	vector<students>schstu;
};
inline bool comp(students a, students b) {
	if (a.g != b.g)
		return a.g > b.g;
	else
		return a.ge > b.ge;
}
inline bool comp2(students a, students b)
{
	return a.id < b.id;
}
int main()
{
	ios::sync_with_stdio(0);
	cin >> n >> m >> k;
	vector<school>sch(m);
	vector<students>stu(n);
	for (register int i = 0; i < m; i++)
		cin >> sch[i].num;
	for (register int i = 0; i < n; i++) {//数据录入
		double g1, g2;
		cin >> g1 >> g2;
		stu[i].id = i;
		stu[i].ge = g1;
		stu[i].g = (g1 + g2) / 2;
		for (register int j = 0; j < k; j++)
		{
			int tempw;
			cin >> tempw;
			stu[i].want.push_back(tempw);
		}
	}
	sort(stu.begin(), stu.end(), comp);//快排
	stu[0].rank = 0;
	for (register int i = 1; i < n; i++) {//排名
		if (stu[i].g == stu[i - 1].g && stu[i].ge == stu[i - 1].ge)
			stu[i].rank = stu[i - 1].rank;
		else
			stu[i].rank = stu[i - 1].rank + 1;
	}
	for (register int i = 0; i < n; i++) {
		students temp = stu[i];
		for (register int j = 0; j < k; j++)
		{
			int wantsch = temp.want[j];//想去的学校
			int num = sch[wantsch].schstu.size();//该校已经录取的学生数量
			if (num < sch[wantsch].num||//未满
				sch[wantsch].schstu[num - 1].rank == temp.rank)//已满但排名相同
			{
				sch[wantsch].schstu.push_back(temp);
				break;
			}
		}
	}
	for (register int i = 0; i < m; i++)
	{
		int num = sch[i].schstu.size();
		if (num)
		{
			sort(sch[i].schstu.begin(), sch[i].schstu.end(), comp2);
			for (int j = 0; j < num; j++)
				cout << sch[i].schstu[j].id << (j != num - 1 ? " " : "\n");
		}
		else
			cout << endl;
	}
	return 0;
}


标签:school,PAT,1080,int,Admission,rank,stu,num,100
From: https://blog.51cto.com/u_16165815/6520495

相关文章

  • PAT_Advanced Level_1078 Hashing (25分)(C++_Hush_平方探测法)
    Thetaskofthisproblemissimple:insertasequenceofdistinctpositiveintegersintoahashtable,andoutputthepositionsoftheinputnumbers.ThehashfunctionisdefinedtobeH(key)=key%TSizewhereTSizeisthemaximumsizeofthehashtable.Qu......
  • 包含目录,库目录,附加包含目录,附加库目录,附加依赖项,系统Path变量
    https://blog.csdn.net/qq_41607336/article/details/98225543?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-98225543-blog-103292393.235^v38^pc_relevant_sort_base2&depth_1-utm_source=distribute.pc_......
  • POSTGRESQL 高可用 Patroni VS Repmgr 到底哪家强(1)
    在众多postgresql高可用模式中,主要的参与者有两位,PatroniVSrepmgr基于这二者的功能优点以及缺点相信大部分人都不是太明确,下面将根据两篇翻译的文字合并,来对两个高可用的程序来做一个比较,consandpros。 1 Repmgr是一款开源的基于postgres复制基础上的高可用软件,他基于2......
  • Error creating bean with name 'sqlSessionFactory' defined in class path resource
    项目启动报错原因分析背景:system模块一个月未重启过,今天重启报数据源问题原因:这里报错的原因是数据源配置问题解决:数据源配置在nacos中,拿该模块的nacos数据源配置与项目启动成功的模块的数据源配置进行对比,检查出不同,改为一样即可......
  • shell pattern(参数展开)
    shellpattern(参数展开) ${parameter:-word}若parameter没有设置或为空,展开结果是word的值。若parameter不为空,则展开结果是parameter的值${parameter:=word}若parameter没有设置或为空,展开结果是word的值。另外,word的值会赋值给parameter。若parameter......
  • ClassLoader类加载器(三):PathClassLoader,DexClassLoader与BootClassLoade
    DexClassLoader和PathClassLoader区别在targetSdk26,是不一样,optimizedDirectory用于声明dex2oat后oat存放的目录。在targetSdk28,是完全一样,optimizedDirectory根本没有用到,注释写得很清楚了。大量的博客文章表示,DexClassLoader能加载jar,aar,未安装的apk,PathClassLoader只......
  • code patch hook
    codepatchhook今天在逆向分析一个程序的时候接触到了codepatchhook,其实这个hook技术我在接触逆向之初就已经知道了,但是今天遇到的有点特殊codepatchhook原理是通过修改api的前5个字节,jmp到自己的函数当用户调用api时,会跳转到自己的函数脱钩调用原始api脱钩为正常......
  • 3.3 Spatial Transformer
    1.SpatialTransformerLayer1.1CNNisnotinvarianttoscalingandrotation(1)CNN并不能真正做到scaling和rotation.(2)如下图所示,在通常情况下,左右两边的图片对于CNN来说是不一样的.  所以,我们考虑一层layer,这层layer能够对inputimage进行旋转缩放,以便更好......
  • export /opt/FriendlyARM/toolschain/4.5.1/bin/:$PATH
    [root@tom/]#arm-linux-gcc-vbash:arm-linux-gcc:commandnotfound...[root@tom/]#export/opt/FriendlyARM/toolschain/4.5.1/bin/:$PATH-bash:export:`/opt/FriendlyARM/toolschain/4.5.1/bin/:/usr/lib/ccache:/usr/local/sbin:/usr/local/bin:/sbin......
  • PAT Advanced 1012. The Best Rank
    PATAdvanced1012.TheBestRank1.ProblemDescription:ToevaluatetheperformanceofourfirstyearCSmajoredstudents,weconsidertheirgradesofthreecoursesonly:C-CProgrammingLanguage,M-Mathematics(CalculusorLinearAlgrbra),andE-E......