关于测试点1:给定的Msize可能小于2,在这种情况下,最小质数从2开始考虑
#include#include #include using namespace std; vector hash_t; int getPrime(int N) { int i; while (1) { if (N < 2) N=2; for (i= 2; i <= (int)sqrt(N); i++) { if (N % i == 0) { N++; break; } } if (i <= (int)sqrt(N)) continue; return N; } } int main() { int N,M; cin >> N >> M; int prime = getPrime(N); hash_t.resize(prime, 0); for (int i = 1; i <= M; i++) { int number; cin >> number; int add = 0; while (add < prime) { int pos = (number +(int)pow(add,2)) % prime; if (hash_t[pos] == 0) { hash_t[pos] = 1; cout << pos; break; } add++; } if (add== prime) cout << "-"; if (i != M) cout << " "; } return 0; }



