CONTINUAR ...? (Pensando)

  • 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
  1. Cada estudiante solo puede ser asignado a un grupo
  2. 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 )
  3. El número de gemas en G1 + G3 es igual al número de gemas en G2 + G4
  4. 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
  1. 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

  2. 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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43311695/article/details/108912582
Recomendado
Clasificación