- SEGUIR…?
- Significado de la pregunta
Hay N estudiantes en la clase, numerados 1, 2, 3 ... N, y el i-ésimo estudiante tiene i gemas. Dividamos a estos N estudiantes en cuatro grupos: G1, G2, G3, G4, y cumplamos las siguientes reglas
- Cada estudiante solo puede ser asignado a un grupo
- Las estudiantes solo pueden ser asignadas al grupo G1 o G2, los estudiantes varones solo pueden ser asignados al grupo G3 o G4 (el género de estos N estudiantes se dará en forma de cadenas, '1' significa estudiantes varones y '0' significa estudiantes mujeres )
- El número de gemas en G1 + G3 es igual al número de gemas en G2 + G4
- Permitir un grupo vacío
Pregunte a qué grupo están asignados los estudiantes N. Si hay varias respuestas, solo envíe una a voluntad.
- Ideas
-
Consideremos primero la situación imposible, supongamos:
El número de gemas en G1 es suma 1 suma_1s u m1
El número de gemas en G2 es suma 2 suma_2s u m2
El número de gemas en G3 es suma 3 suma_3s u m3
El número de gemas en G4 es suma 4 suma_4s u m4
有suma 1 + suma 3 = = suma 2 + suma 4 suma_1 + suma_3 == suma_2 + suma_4s u m1+s u m3==s u m2+s u m4
suma 1 + suma 2 + suma 3 + suma 4 = = N ∗ (N + 1) / 2 suma_1 + suma_2 + suma_3 + suma_4 == N * (N + 1) / 2 s u m1+s u m2+s u m3+s u m4==norte∗( N+1 ) / 2
即2 ∗ (suma 1 + suma 3) = = N ∗ (N + 1) / 2 2 * (suma_1 + suma_3) == N * (N + 1) / 22∗( s u m1+s u m3)==norte∗( N+1 ) / 2
Entonces, si N * (N + 1) / 2 no es un número par, directamente la salida -1 -
Si es posible, ¿cómo asignarlo?
Primero, considere cómo satisfacer suma 1 + suma 3 == suma 2 + suma 4 suma_1 + suma_3 == suma_2 + suma_4s u m1+s u m3==s u m2+s u m4
Debido a que el número de gemas es 1 ~ N consecutivo, podemos asignarlo así, por ejemplo, N = 7, el número de gemas es 1 2 3 4 5 6 7, agrupando en pares (6,7), (4,5), ( 2,3), (1)Sea 7 puntos a 1, 3 (lo que dependa del género), 6 puntos a 2, 4 (que depende del género),
4 puntos a 1, 3 (que depende del género) y 5 puntos a 2, 4 (que depende de cuál sea específico) Género)
Deje 3 puntos a 1, 3 (cuál depende del género), 2 puntos a 2, 4 (cuál depende del género)Esto puede garantizar que la diferencia máxima entre 1, 3 y 2, 4 sea 1 (solo cuando N% 4 no es 0, la diferencia es 1, en este momento, el 1 anterior es inútil, solo para compensar la diferencia)
- Código
#pragma GCC optimize(2)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long ul;
typedef unsigned long long ull;
#define pi acos(-1.0)
#define e exp(1.0)
#define pb push_back
#define mk make_pair
#define fir first
#define sec second
#define scf scanf
#define prf printf
typedef pair<ll,ll> pa;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int MAX_N=1e5+7;
int N,T;
char s[MAX_N];
int res[MAX_N];//记录答案
int main()
{
// freopen(".../.txt","w",stdout);
// freopen(".../.txt","r",stdin);
ios::sync_with_stdio(false);
cin>>T;
int i,j;
while(T--){
cin>>N;
cin>>s+1;
int sum=N*(N+1)/2;
if(sum&1){
cout<<-1<<endl;
continue;
}
bool flag=1;
for(i=N;i>=1;i-=2){
if(flag){
//大的放到1或者3里面
res[i]=(s[i]=='1'?3:1);
res[i-1]=(s[i-1]=='1'?4:2);
}
else{
//大的放到2或者4里面
res[i-1]=(s[i-1]=='1'?3:1);
res[i]=(s[i]=='1'?4:2);
}
flag=!flag;//1、3和2、4交替着放大的,这样才能保证1、3的和与2、4的和最大相差1
}
if(N%4){
//没有分均衡,将最后一个1分配给2、4(因为我们先给1、3分配的,如果不够的话也是2、4不够)
if(s[1]=='1')
res[1]=4;
else
res[1]=2;
}
for(i=1;i<=N;i++){
cout<<res[i];
}
cout<<endl;
}
return 0;
}