HDU 6794 Tokitsukaze y múltiples

Pregunta: Dada una secuencia, como máximo se pueden seleccionar varios subsegmentos de modo que la suma de cada segmento sea exactamente un múltiplo de p.

Solución: El
mapa codicioso registra el resultado del resto de la suma anterior. Si aparece el mismo resultado, significa que la suma entre los mismos resultados es un múltiplo de p. Solo hazlo codiciosamente.

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<fstream>
#include<set>
#include<map>
#include<sstream>
#include<iomanip>
#define ll long long
using namespace std;
const int maxn = 1e5 + 5;
int t, n, p, a[maxn], dp[maxn], sum;
map<int, int> m;
int main() {
    
    
	scanf("%d", &t);
	while (t--) {
    
    
		m.clear();
		m[0] = 1;
		sum = 0;
		scanf("%d%d", &n, &p);
        for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
		int ans = 0;
		for (int i = 1; i <= n; i++) {
    
    
			sum = (sum + a[i]) % p;
			if (m[sum]) {
    
    
				ans++;
				sum = 0;
				m.clear();
				m[0] = 1;
			}
			else m[sum] = 1;
		}
		printf("%d\n", ans);
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq_43680965/article/details/107644235
Recomendado
Clasificación