就是1代表男生,持有的宝石只能放在g3组或者g4组,0代表女生,持有的宝石只能放在g1组或g2组,给了一个字符串,第一个数字代表的同学持有1个宝石,第二个数字代表的同学持有2个宝石 依此类推,需要你将宝石分配好,使g1和g3的宝石总和等于g2+g4,并输出你是怎么分配的,也就是输出你把每个同学的宝石放在哪个组里了 这里注意放法不止一种,所以不必要一定跟案例对上。
如果宝石总和是奇数的话肯定不能平分 输出-1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(){
int T,n,i,p[100001];
char arr[100001];
scanf("%d",&T);
while(T--){
long long g1=0,g2=0,g3=0,g4=0,sum=0;
scanf("%d",&n);
scanf("%s",arr);
for(i=1;i<=n;i++){
sum+=i;
}
for(i=n-1;i>=0;i--){ //从最后一个同学开始分配
switch(arr[i]){
case '1': //是男同学的情况下
if(g1+g3+i+1>sum/2){
g4+=i+1;
p[i]=4;
}else{
g3+=i+1;
p[i]=3;
}
break;
case '0': //女同学的情况下
if(g1+g3+i+1>sum/2){
g2+=i+1;
p[i]=2;
}else{
g1+=i+1;
p[i]=1;
}
break;
}
}
if(sum%2!=0)
printf("-1\n");
else{
for(i=0;i<n;i++){
printf("%d",p[i]);
}
printf("\n");
}
}
}