A. XXXXX (fuerzas del código)

A.
Problema de XXXXX : dada una matriz a, longitud n y un número entero b. Encuentre el subintervalo más largo cuya suma no sea múltiplo de b.

Si: todos los números son múltiplos de b, entonces la suma de los subintervalos de a es un múltiplo de b.
Si: la suma de a no es múltiplo de b, entonces la respuesta es la longitud de toda la matriz.
Si: la suma de a es múltiplo de b, entonces encuentre el subíndice x del primer número que no sea múltiplo de b de izquierda a derecha, y encuentre el subíndice y del primer número que no sea múltiplo de b de derecha a izquierda, entonces Tome max (n - len ([1, x]), len ([1, y))) max (n-len ([1, x]), len ([1, y)))m a x ( n-l e n ( [ 1 ,x ] ) ,l e n ( [ 1 ,y)))

Explique que la suma del tercero a es un múltiplo de b, y reste un número que no sea un múltiplo de b, y el resto no sea un múltiplo de b.

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5+10;
int a[N];
int main() {
    
    
	ll t, n, x, sum, flag;
	scanf("%lld", &t);
	while(t--) {
    
    
		sum = 0, flag = 0;
		scanf("%lld%lld", &n, &x);
		for(int i=1; i<=n; i++) {
    
    
			scanf("%lld", &a[i]);
			sum += a[i];
			if(a[i] % x) flag = 1;
		}
		if(sum % x) printf("%lld\n", n);//总和不是b的倍数。
		else {
    
    
			if(!flag) printf("-1\n");//全是b的倍数
			else {
    
    
				ll i = 1, j = n;
				while(a[j] % x == 0) j--;//从右往左找
				while(a[i] % x == 0) i++;//从左往右找
				printf("%lld\n", max(j-1, n-i));
			}
		}
	}
	
	return 0;
} 

Supongo que te gusta

Origin blog.csdn.net/weixin_45363113/article/details/106797393
Recomendado
Clasificación