题意
t个样例,每个样例n个学生,每个学生有一个编号。将学生按编号分成四组,问如何分最均匀。
题解
暴力,a的暴力范围为0-159,b的暴力范围为(a+1)-159,c的暴力范围为(b+1)-159。
代码
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#define INF 1e9
using namespace std;
int num[200];
double sum[200];
int main()
{
int t;
scanf("%d",&t);
for(int ks=1;ks<=t;ks++){
memset(num,0,sizeof(num));
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
int x;
scanf("%d",&x);
num[x]++;
}
sum[0]=num[0];
for(int i=1;i<160;i++){
sum[i]=sum[i-1]+num[i];
}
double d=INF,a=0,b=0,c=0;
double p=(double)n/4;
for(int i=0;i<160;i++){
for(int j=i+1;j<160;j++){
for(int k=j+1;k<160;k++){
double dd=fabs(sum[i]-p)+fabs(sum[j]-sum[i]-p)+fabs(sum[k]-sum[j]-p)+fabs(n-sum[k]-p);
if(dd<d){
d=dd;
a=i,b=j,c=k;
}
}
}
}
printf("Case %d: %d %d %d\n",ks,(int)a,(int)b,(int)c);
}
return 0;
}