2019 Blue Bridge Cup J Pregunta --- Transmisión psiónica

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
código: (No es del todo correcto, mi idea es encontrar la posición de dos signos diferentes de 2 —— n-1. Si el resultado de reemplazo puede hacer que AbsMax sea más pequeño, cámbielo, de lo contrario no lo cambie);

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

int max=0;
int getAbsMax(int a,int b,int c){
    
    
	a=abs(a);
	b=abs(b);
	c=abs(c);
	int ans=a;
	if(b>ans)ans=b;
	if(c>ans)ans=c;
	
	return ans;
}

int check(int *a,int n){
    
    
	for(int i=1;i<=n-2;i++){
    
    
		if(a[i]*a[i-1]<0||a[i]*a[i+1]<0){
    
    
			int num1=a[i-1];
			int num2=a[i];
			int num3=a[i+1];
			if(a[i]>0){
    
    
				num1-=num2;
				num3-=num2;
				num2=-num2;
				
				int eee=getAbsMax(num1,num2,num3);
				if(eee<max){
    
    
					a[i-1]=num1;
					a[i]=num2;
					a[i+1]=num3;
					max=eee;
					return 1;	
				}
			}else{
    
    
				num1+=num2;
				num3+=num2;
				num2=-num2;
				
				int eee=getAbsMax(num1,num2,num3);
				if(eee<max){
    
    
					a[i-1]=num1;
					a[i]=num2;
					a[i+1]=num3;
					max=eee;
					return 1;	
				}
			}
		}
	}
	return 0;
}

int main(){
    
    
	int T;
	scanf("%d",&T);
	for(int i=0;i<T;i++){
    
    
		max=0;
		int n;
		scanf("%d",&n);
		int a[n];
		for(int j=0;j<n;j++){
    
    
			scanf("%d",&a[j]);
		}
		for(int i=0;i<n;i++){
    
    
			if(abs(a[i])>max){
    
    
				max=abs(a[i]);
			}
		}
		while(check(a,n)==1){
    
    }
		printf("%d\n",max);
	}
	return 0;
} 

Supongo que te gusta

Origin blog.csdn.net/timelessx_x/article/details/115028675
Recomendado
Clasificación