1062 Talent and Virtue

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1062 Talent and Virtue相关的知识,希望对你有一定的参考价值。

1.在结构体里面设置total_grades属性是明智之举,但是不可以在结构体内得到total_grades=virtue_grade+talent_grade;

2.弄清题意,对人进行分类,等级越高type值越小,但是注意分的类别也许出现交叉的情况,细的要出现在粗的之后

3.尤其注意要被淘汰的选手,一旦淘汰要直接进入下一轮循环,否则可能因为type被覆盖而被误捞回来。例如:60分的最低分,有人v=90,t=50,本该淘汰,却可能被接下来的判断认为是君子

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100010;

struct person{
	char id[10] = "";
	int virtue_grade = 0;
	int talent_grade = 0;
	int total_grades = 0;
	int type = 0;//属于哪类人,虽然我不喜欢把人分类 
	 
}pers[maxn];

bool cmp(person a,person b){
	if(a.type!=b.type)return a.type<b.type; 
	else if(a.total_grades!=b.total_grades) return a.total_grades>b.total_grades;
	else if(a.virtue_grade!=b.virtue_grade)return a.virtue_grade>b.virtue_grade;
	else if(a.talent_grade!=b.talent_grade)return a.talent_grade>b.talent_grade;
	else return strcmp(a.id,b.id)<0;
}
// v,t >= H 圣人  0
// t<H v>=H 君子  1
// v,t<=H v>=t 愚人  2
// v,t>=L 3
// v<L or t<L 不录 4 

int main(){
	
	int n,L,H;
	scanf("%d %d %d",&n,&L,&H);
	int idx = 0;
	char now_id[10] = "";
	int v = 0;
	int t = 0;
	int now_type = 5;
	
	while(n--){
		scanf("%s %d %d",now_id,&v,&t);
		if(v<L||t<L){
			now_type = 4;
			continue;//4可能被3,2,1覆盖掉,很危险,一定要跳出循环 
		}
		if(v>=L&&t>=L)now_type = 3;//可能被 2 1 0 覆盖掉 
		if(v<=H&&t<=H&&v>=t)now_type = 2;
		if(t<H&&v>=H)now_type = 1;
		if(v>=H&&t>=H)now_type = 0;
		
		if(now_type!=4){
			strcpy(pers[idx].id,now_id);
			pers[idx].virtue_grade = v;
			pers[idx].talent_grade = t;
			pers[idx].total_grades = v+t;
			pers[idx].type = now_type;
			idx ++;
		}
	
	}
	
	printf("%d\\n",idx);
	
	sort(pers,pers+idx,cmp);
	
	for(int i=0;i<idx;i++){
		printf("%s %d %d\\n",pers[i].id,pers[i].virtue_grade,pers[i].talent_grade);
	}
	
	
	return 0;
}

以上是关于1062 Talent and Virtue的主要内容,如果未能解决你的问题,请参考以下文章

1062. Talent and Virtue (25)

PAT-B 1015. 德才论(同PAT 1062. Talent and Virtue)

PAT 1062 Talent and Virtue[难]

1062. Talent and Virtue (25)排序——PAT (Advanced Level) Practise

PAT B1015/A1062 Talent and Virtue

1062 Talent and Virtue