Foto de grupo PAT B1055 (25 puntos)

Inserte la descripción de la imagen aquí
Es una pregunta de simulación un poco molesta. Me tomó 40 minutos escribir AC. Mi enfoque es sacar primero la última fila y generarla por separado, y luego la cantidad de personas en las primeras filas es la misma. Puede abrir una nueva matriz para almacenarlo La implementación específica Los detalles son un poco engorrosos, por lo que puede mirar el código usted mismo. . .

#include <cstdio>
#include <algorithm>
#include <cstring>

using namespace std;

struct Student{
    
    
	char name[10];
	int h;
};

bool cmp(Student s1, Student s2){
    
    
	if(s1.h != s2.h) return s1.h > s2.h;
	return strcmp(s1.name,s2.name) < 0;
}

int main(){
    
    
	int n, k;
	scanf("%d %d", &n, &k);
	
	Student stu[n];
	for(int i=0; i<n; i++){
    
    
		scanf("%s %d", stu[i].name, &stu[i].h);
	}
	
	sort(stu, stu+n, cmp);
	
	int lastnum = n/k + n%k;
	Student temp[lastnum];
	int mid = lastnum/2 + 1;
	temp[mid] = stu[0];
	int t = 1;
	int flag = 0;
	for(int i=1; i<lastnum; i++){
    
    
		if(!flag){
    
    
			temp[mid-t] = stu[i];
			flag = 1;
		}else{
    
    
			temp[mid+t] = stu[i];
			t++;
			flag = 0;
		}
	}
	
	for(int i=1; i<=lastnum; i++){
    
    
		printf("%s", temp[i].name);
		if(i != lastnum) printf(" ");
	}
	printf("\n");
	
	int numleft = n - lastnum;
	Student nstu[numleft];
	for(int i=1; i<=numleft; i++){
    
    
		nstu[i] = stu[lastnum++];
	}
	
	int num = n / k;
	int lun = numleft / num;
	for(int i=0; i<lun; i++){
    
    
		Student temp[num+1];
		int mid = num/2 + 1;
		temp[mid] = nstu[i*num+1];
		int t = 1;
		int flag = 0;
		for(int j=i*num+2; j<=(i+1)*num; j++){
    
    
			if(!flag){
    
    
				temp[mid-t] = nstu[j];
				flag = 1;
			}else{
    
    
				temp[mid+t] = nstu[j];
				t++;
				flag = 0;
			}
		}
		for(int j=1; j<=num; j++){
    
    
			printf("%s", temp[j].name);
			if(j != num) printf(" ");
		}
		printf("\n");
	}
	
	return 0;
} 

Supongo que te gusta

Origin blog.csdn.net/weixin_45964844/article/details/113696612
Recomendado
Clasificación