1080 Graduate Admission (30 分)

该博客介绍了一个C++程序,用于解决学生根据笔试、面试成绩和学校录取名额进行录取的问题。程序首先定义了包含学生信息的结构体,然后通过排序和遍历算法确定每个学校的录取名单,确保遵循总成绩高、笔试成绩高的优先原则,并处理了成绩相同的情况。最后,程序输出每个学校的录取学生ID。
摘要由CSDN通过智能技术生成

1080 Graduate Admission (30 分)

题意

给出一组学生信息,包括笔试成绩和面试成绩,以及报名的学校。
给出所有学校的录取名额,输出每个学校录取的学生id,id从小到大输出。每所学校输出占一行,无录取学生则输出空行。

总成绩高的学生优先,同情况下笔试成绩高的学生优先。当两个学生所有成绩相同时可都录取(允许超出录取名额)。

思路

建立结构体,包括id,笔试,面试,总成绩,报名的学校。
建立数组schools存储学校录取名额,pass存储学校录取学生id,counts记录学校已录取人数,last记录最后一名录取学生成绩。
输入时同时记录学生id,否则之后排序会打乱。
按要求排序,遍历学生信息。
当学校录取满员时判断最后一名成绩与当前学生成绩,如果相同则录取。
输出时给录取学生id排序。

代码

#include<stdio.h>
#include<string.h>
#include<algorithm>

using namespace std;

typedef struct node{
	int exam,interview,prefer[107],number;
	double final;
}node;

bool cmp(node x,node y)
{
	if(x.final==y.final){
		return x.exam>y.exam;
	}else{
		return x.final>y.final;
	}
}

node students[1000007];
int schools[107],pass[107][4007],counts[107],last[107][2];

void function(int n,int m,int k)
{
	int x,y,z,q;
	memset(counts,0,sizeof(counts));
	for(int i=0;i<n;i++){
		for(int j=0;j<k;j++){
			x=students[i].prefer[j];
			y=students[i].interview;
			z=students[i].exam;
			q=students[i].number;
//			printf("")
			if(counts[x]<schools[x]||(counts[x]>=schools[x]&&y==last[x][1]&&z==last[x][0])){
				last[x][0]=z;
				last[x][1]=y;
				pass[x][counts[x]]=q;
				counts[x]++;
				break;
			}
		}
	}
	for(int i=0;i<m;i++){
		sort(pass[i],pass[i]+counts[i]);
		for(int j=0;j<counts[i];j++){
			if(j!=0){
				printf(" ");
				
			}
			printf("%d",pass[i][j]);
		}
		printf("\n");
	}
}

int main()
{
	int n,m,k,x,y,z;
	scanf("%d%d%d",&n,&m,&k);
	for(int i=0;i<m;i++){
		scanf("%d",&schools[i]);
	}
	for(int i=0;i<n;i++){
		scanf("%d%d",&x,&y);
		students[i].exam=x;
		students[i].interview=y;
		students[i].number=i;
		students[i].final=(x+y)/2;
		for(int j=0;j<k;j++){
			scanf("%d",&z);
			students[i].prefer[j]=z;
		}
	}
	sort(students,students+n,cmp);
	function(n,m,k);
	return 0;
}
逻辑斯蒂回归(Logistic Regression)是一种常用的算法,常用于二类问题中,如预测研究生能否被录取。Kaggle的Graduate Admission数据集包含了申请人的各项信息,例如GRE数、TOEFL数、大学GPA、科研经验、推荐信等,目标变量通常是“是否被录取”(是否被研究生院接受)。 首先,我们来理解数据集属性的意义: 1. GRE Score: 研究生入学考试成绩 2. TOEFL Score: 英语水平测试得 3. University Rating: 学校排名 4. SOP: Statement of Purpose(个人陈述)的质量 5. LOR: Letter of Recommendation(推荐信)的质量 6. CGPA: 学术平均绩点 7. Research: 科研经历(0或1) 8. Chance of Admit: 录取概率(这个不是原始数据,而是我们最终需要预测的目标) 数据预处理步骤主要包括: 1. **加载数据**:使用pandas库读取csv文件并查看基本信息。 2. **缺失值处理**:检查是否存在缺失值,并选择填充、删除或估算策略。 3. **编码类变量**:将类别型特征转换成数值型,如使用one-hot encoding或者LabelEncoder。 4. **标准化或归一化**:对于数值型特征,通常会做数据缩放,如Z-score标准化或min-max归一化。 5. **划训练集和测试集**:通常采用80%的数据作为训练集,剩余的20%作为测试集。 6. **特征工程**:如果有必要,可以创建新的特征或调整现有特征。 逻辑斯蒂回归的预测原理是基于sigmoid函数,该函数将线性组合后的输入映射到0到1之间,表示事件发生的可能性。模型学习如何调整权重系数,使得给定输入条件下,正类(如录取)的概率最大化。 实现过程(Python示例,假设使用sklearn库): ```python import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 1. 加载数据 data = pd.read_csv('Admission_Predict.csv') # 2. 数据预处理 # ... 缺失值处理、编码、标准化等操作 # 3. 划特征和目标 X = data.drop('Chance of Admit', axis=1) y = data['Chance of Admit'] # 4. 划训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 5. 特征缩放 scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) X_test_scaled = scaler.transform(X_test) # 6. 创建模型并拟合 model = LogisticRegression() model.fit(X_train_scaled, y_train) # 7. 预测 y_pred = model.predict(X_test_scaled) # 8. 评估模型性能 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值