【PAT】B1055 集体照(25 分)


很简单的two points问题

注意:K是行数

#include
#include
#include
#include
#include
using namespace std;
struct people{
	char name[10];
	int height;
}arr[10005];
bool cmp(people A,people B){
	if(A.height!=B.height) return A.height0;
}
int main(){
	int N,K;scanf("%d %d",&N,&K);
	for(int i=0;i=1;i--){//K排
		int left=1,right=N/K;
		if(i==K) right=N/K+N%K;
		int mid=right/2+1;
		int l=mid-1,r=mid+1;
		data[mid]=arr[flag--];
		while(l>=left||r<=right){
			if(l>=left){
				data[l--]=arr[flag--];
			}
			if(r<=right){
				data[r++]=arr[flag--];
			}

		}
		for(int j=1;j<=right;j++){
			if(j!=1) printf(" ");
			printf("%s",data[j].name);
			if(j==right&&i!=1) printf("\n");
		}
	}
	getchar();
	return 0;
}