求助
查看原帖
求助
411727
Kingna楼主2022/9/11 13:32

为什么 60?

用了5个哈希

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define PII pair<int, int>
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
#define _pre(i, a, b) for(int i = (a); i >= (b); i--)

const int N = 2e5 + 5, M = 1e6 + 10, mod = 1e6 + 3, mod1 = 1e5 + 7, mod2 = 1e5 + 3, mod3 = 1e6 + 7, mod4 = 411727;

int t, n, vis[M], vis2[M], vis3[M], vis4[M], vis5[M];

inline int read() {
	char c = ' ';
	int f = 1, x = 0;
	while (c < '0' || c > '9') {
		if (c == '-') f = -1;
		c = getchar();
	}
	while (c >= '0' && c <= '9') {
		x = x * 10 + c - '0';
		c = getchar();
	}
	return x * f;
}

inline void wr(int x) {
	if (x < 0) x = -x, putchar('-');
	if (x > 9) wr(x / 10);
	putchar(x % 10 + '0');
}

signed main() {
	cin >> t;
	while (t--) {
		memset(vis, 0, sizeof vis);
		memset(vis2, 0, sizeof vis2);
		memset(vis3, 0, sizeof vis3);
		memset(vis4, 0, sizeof vis4);
		memset(vis5, 0, sizeof vis5);
		
		cin >> n;
		for (int i = 1; i <= n; i++) {
			int x;
			x = read();
			if (!vis[(x % mod + mod) % mod] && !vis2[(x % mod1 + mod1) % mod1] 
				&& !vis3[(x % mod2 + mod2) % mod2] && 
					!vis4[(x % mod3 + mod3) % mod3] && !vis5[(x % mod4 + mod4) % mod4]) {
					wr(x), putchar(' ');
					vis[(x % mod + mod) % mod] = 1, 
						vis2[(x % mod1 + mod1) % mod1] = 1, vis3[(x % mod2 + mod2) % mod2] = 1;
					vis4[(x % mod3 + mod3) % mod3] = 1, vis5[(x % mod4 + mod4) % mod4] = 1;
				}
		}
		puts("");
	} 
}
2022/9/11 13:32
加载中...