pat-1080

#include<iostream>
#include<vector>
#include<algorithm>
#include<unordered_map>
using namespace std;
struct node{
	int id,ge;
	double final;
};
bool cmp(node &a,node&b){
	if(a.final!=b.final) return a.final>b.final;
	else return a.ge>b.ge;
}

vector<node> v; 

int main(){
	int n,m,k,gee,gii,p1,p2,p3;
	double fin;
	scanf("%d %d %d",&n,&m,&k);
	vector<int>  q[n];
	int book[n];
	int a[m];
	for(int i=0;i<m;i++){
		scanf("%d",&a[i]);//scanf 又忘带&导致转几个圈出错,以后特别检查一下(注意) 
	}
	for(int i=0;i<n;i++){
		
		scanf("%d %d",&gee,&gii);
		fin=(gee+gii)*1.0/2;
		v.push_back({i,gee,fin});
		for(int j=0;j<k;j++){
		
			int temp;
			scanf("%d",&temp);
		
		 q[i].push_back(temp);
		}
		
	}
	sort(v.begin(),v.end(),cmp);
	int rank=0;
	node pre;
	pre.ge=-1;
	unordered_map <int,int> ran;
	for(int i=0;i<n;i++){
		if(pre.final==v[i].final&&pre.ge==v[i].ge){//写了pre忘打pre(注意) 
			ran[v[i].id]=rank;
		}
		else{
			rank++;
			ran[v[i].id]=rank;
		}
		pre=v[i];
	}
	int prer=-1;
	vector<int>aa[m];
	for(int i=0;i<n;i++){
		for(int j=0;j<k;j++){
			int temp1=ran[v[i].id];
			int temp2=ran[prer];
			if(a[q[v[i].id][j] ]>0 ){
				aa[q[v[i].id][j]].push_back(v[i].id);
				a[q[v[i].id][j]]--;
				book[v[i].id]=q[v[i].id][j];
				break;
			}
			else if(a[q[v[i].id][j]]==0&&temp1==temp2 &&book[prer]==q[v[i].id][j]){
				aa[q[v[i].id][j]].push_back(v[i].id);
				book[v[i].id]=q[v[i].id][j];
				break;
			}
		}
		prer=v[i].id;
	}
	for(int i=0;i<m;i++){
		sort(aa[i].begin(),aa[i].end());
	}
	for(int i=0;i<m;i++){
		if(aa[i].size()!=0)
		for(int j=0;j<aa[i].size();j++){
			if(j!=0) printf(" "); 
			printf("%d",aa[i][j]);
			if(j==aa[i].size()-1) printf("\n");
		}
		else printf("\n");
	}
	return 0;
}

用时两个小时其他的没啥,太慢

总结

1. //scanf 又忘带&导致转几个圈出错,以后特别检查一下(注意) 

2.//写了pre忘打pre(注意)

3.注意一下这里如果rank相同,并且前面的人已经被录取了,才能录同rank的所以要加判断book【prer】==此学校

4.注意成绩排名问题同名次的rank写法

英语

 

问题 总结一下里面可用的模板  我觉得这种问题要分类型整理 

比如成绩排序问题,等把相同类型的纵向做一个总结经常用到哪一块代码提高速度

 

·

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值