1012 The Best Rank (25 分)(简单Sort)

#include"bits/stdc++.h"
using namespace std;
char table[1000006];
struct stud{
	int C, M, E;
	double A;
	stud(){}
	stud(int c, int m, int e, double a){
		C = c;
		M = m;
		E = e;
		A = a;
	}
};
struct node{
	char subject;
	int rank;
	node(char a, int b){
		rank = b;
		subject = a;
	}
};
int getpri(char p){
	if(p == 'A') return 1;
	if(p == 'C') return 2;
	if(p == 'M') return 3;
	if(p == 'E') return 4;
	return 5;
}
bool cmp(node a, node b){
	if(a.rank != b.rank) return a.rank < b.rank;
	else return getpri(a.subject) < getpri(b.subject);
}
map<int, stud> mp;
vector<int> Cv, Mv, Ev;
vector<double> Av;
int main(){
	memset(table, 0, 1000006);
	int n, checkn;
	scanf("%d %d", &n, &checkn);
	for(int i = 0; i < n; ++i){
		int tempid, tempc, tempm, tempe;
		double tempa;
		scanf("%d %d %d %d", &tempid, &tempc, &tempm, &tempe);
		tempa = (tempc + tempm + tempe) / 3.;
		Av.push_back(tempa);
		Cv.push_back(tempc);
		Mv.push_back(tempm);
		Ev.push_back(tempe);
		mp[tempid] = stud(tempc, tempm, tempe, tempa);
		table[tempid] = -1;
	}
	sort(Av.begin(), Av.end());
	sort(Cv.begin(), Cv.end());
	sort(Mv.begin(), Mv.end());
	sort(Ev.begin(), Ev.end());
	for(int i = 0; i < checkn; ++i){
		int tempid;
		scanf("%d", &tempid);
		if(!table[tempid]){
			printf("N/A\n");
			continue;
		}
		stud s = mp[tempid];
		vector<node> v;
		v.push_back(node('A', 1 + n - (upper_bound(Av.begin(), Av.end(), s.A) - Av.begin())));
		// 注意:不能使用n - (lower_bound(Av.begin(), Av.end(), s.A) - Av.begin()),这是因为存在并列。
		v.push_back(node('C', 1 + n - (upper_bound(Cv.begin(), Cv.end(), s.C) - Cv.begin())));
		v.push_back(node('M', 1 + n - (upper_bound(Mv.begin(), Mv.end(), s.M) - Mv.begin())));
		v.push_back(node('E', 1 + n - (upper_bound(Ev.begin(), Ev.end(), s.E) - Ev.begin())));
		sort(v.begin(), v.begin() + 4, cmp);
		printf("%d %c\n", v[0].rank, v[0].subject);
	}
}
下面这个代码报错了,应该怎么改: %%Matlab Genetic Algorithm for Sin Prediction clear; clc; %population size Npop=50; %create the population Pop=rand(Npop,1)*2*pi; %define fitness fit=@(x) sin(x); %fitness score score=fit(Pop); %maximum number of generations maxgen=100; %weights w=0.7; %probability p_crossover=0.9; p_mutation=0.2; %loop for number of generations for gen=1:maxgen %ranking %rank the population in descending order [~,rank]=sort(score); %rank the population in ascending order rank=flipud(rank); %normalised rank NormalisedRank=rank/sum(rank); %selection %cumulative sum of the normalised rank cumulativeSum=cumsum(NormalisedRank); %randomly select the two parents %from the populations based on their %normalised rank randnum=rand; parent1=find(cumulativeSum>randnum,1); randnum=rand; parent2=find(cumulativeSum>randnum,1); %crossover %randomly select the crossover point pc=randi([1 Npop-1]); %create the offsprings offspring1=[Pop(parent1,1:pc) Pop(parent2,pc+1:end)]; offspring2=[Pop(parent2,1:pc) Pop(parent1,pc+1:end)]; %perform crossover with a probability if(rand<p_crossover) Pop=[Pop; offspring1; offspring2]; end %mutation %randomly select the point of mutation pm=randi([1 Npop]); %mutate the value under the chosen point Pop(pm)=rand*2*pi; %perform mutation with a probability if (rand<p_mutation) Pop(pm)=rand*2*pi; end %evaluate new population score=fit(Pop); %elitism %sort the population in ascending order %of their fitness score [score,rank]=sort(score); elite=Pop(rank(1),:); Pop(rank(Npop),:)=elite; %replace old population Pop=Pop(1:Npop,:); end %print the best solution disp('Best Solution: '); disp(elite);
02-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值