Arranjo da sorte de Nowcoder Xiaobao (resto na teoria dos números)

Link do tópico

Link: https://ac.nowcoder.com/acm/contest/11746/B
Fonte: Niuke.com

Descrição do tópico
Para Xiaobao, se a soma de uma matriz pode dividir seu número da sorte k, é sua matriz da sorte, e outras matrizes Xiaobao são muito irritantes. Agora há uma matriz de comprimento n, e Xiaobao deseja saber quanto tempo a submatriz sortuda mais longa está entre as submatrizes desta matriz.

Para a definição de uma submatriz, se for possível obter a matriz a da matriz b excluindo vários elementos do início e do fim, respectivamente (pode ser zero ou todos, o número de exclusões antes e depois não tem ser o mesmo), então o array a é considerado filho do array b Array. (A submatriz contém a matriz original, mas não contém a string vazia)

Descrição da entrada:
vários grupos de entrada. A primeira linha contém um inteiro T (1≤T≤10), indicando que existem T grupos de dados de teste.

Cada conjunto de dados de teste contém duas linhas. A primeira linha contém dois inteiros n e k ( 1≤n≤10 5, 1≤k≤10 5), que representam o comprimento da matriz e o número da sorte de Xiaobao, respectivamente. A segunda linha contém n inteiros separados por espaço a1, a2,., An (0≤ai≤10 ^ 9), que são elementos da matriz.

Descrição da saída:
para cada grupo de dados, produza o comprimento da submatriz mais longa que pode ser divisível por k. Se não houver tal submatriz, produza -1.
Exemplo 1 Cópia de
entrada 4 3 3 1 2 3 3 5 1 2 3 3 7 1 2 3 1 6 5 Cópia de saída 3 2 -1 -1















Calcule o prefixo e quando o valor da operação restante for igual, significa que a soma do meio é um múltiplo de k

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define INF 0x3f3f3f3f
int main(){
    
    
	int t;
	cin>>t;
	while(t--){
    
    
		int n,k,sum=0,nk[100009],mx=-1;
		memset(nk,-1,sizeof(nk));
		cin>>n>>k;
		nk[0]=0;//
		for(int i=1;i<=n;i++){
    
    
			int x;
			cin>>x;
			sum+=x;
			sum%=k;
			if(nk[sum]==-1)nk[sum]=i;
			else mx=max(mx,i-nk[sum]);
		}
		cout<<mx<<endl;
	}

	return 0;
	
}

Acho que você gosta

Origin blog.csdn.net/Minelois/article/details/114106559
Recomendado
Clasificación