题意:
没看懂题
后来可知:首先定义一个hash表,表长为大于等于给定size的最小素数;然后给定一个序列往里插,平方探测那种方法,插不进去输出not*,,,,然后给定一个序列来查找,问平均查找时间
思路:
如代码所示吧2333
#include<bits/stdc++.h>
#include<cstring>
#define FI first
#define SE second
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
const int maxn = 1000 + 7;
const int maxd = 2e4 + 77;
const ll INF = 0x7f7f7f7f;
int sz, n, m;
bool is_p(int x) {
if(x == 0 || x == 1) return false;
for(int i = 2; i*i <= x; ++i)
if(x % i == 0) return false;
return true;
}
int main() {
scanf("%d%d%d", &sz, &n, &m);
while(!is_p(sz)) sz++;
vector<int> a(sz+7);
for(int i = 1; i <= n; ++i) {
int x; scanf("%d", &x);
bool f = false;
for(int j = 0; j <= sz; ++j) {
int pos = (x + j*j) % sz;
if(a[pos] == 0) {
a[pos] = x;
f = true;
break;
}
}
if(!f) printf("%d cannot be inserted.\n", x);
}
int ans = 0;
for(int i = 1; i <= m; ++i) {
int x; scanf("%d", &x);
for(int j = 0; j <= sz; ++j) {
ans++;
int pos = (x + j*j) % sz;
if(a[pos] == x || a[pos] == 0) {
break;
}
}
//cout << ans << " +++ " << endl;
}
printf("%.1f\n", ans*1.0/m);
return 0;
}