#P14529. [2026年省队模拟联测]哈希表
[2026年省队模拟联测]哈希表
【题目描述】
C 最近在学哈希表。某天他看到这样一段代码:
// h is the hash table.
int a[N];
void add(long long &cnt, long long x, long long len) {
long long y = x % len;
while(h[y] != -1 && h[y] != x)
y = (y + 1) % len, cnt ++;
h[y] = x;
}
long long solve(long long len) {
for(int i = 0; i < len; i ++) h[i] = -1;
long long cnt = 0;
for(int i = 1; i <= n; i ++) add(cnt, a[i], len);
return cnt;
}
他忽然想到一个问题:如果给定 并保证互不相同,让 在 之间任意选定,那么 能取得的最大值是多少呢?
【输入格式】
第一行一个整数 ,表示该数据属于的子任务的编号。
第二行一个整数 。
第三行 个整数表示 。
【输出格式】
输出一行一个整数表示 可能取得的最大值。
【输入输出样例1】
| hash.in | hash.out |
|---|---|
| 9 3 2 4 6 |
1 |
【输入输出样例 1 说明】
解释:当 时,有 ,可以证明没有更大的答案。
【输入输出样例2】
| hash.in | hash.out |
|---|---|
| 9 6 1 2 3 7 8 9 |
8 |
【输入输出样例 2 说明】
解释:当 时,有 ,可以证明没有更大的答案。
【数据规模与约定】
数据采用捆绑且依赖测试,你能获得一个子任务的分数当且仅当你通过了该子任务和其依赖的子任务的所有测试点。
| 子任务编号 | 分数 | 依赖关系 | ||
|---|---|---|---|---|
| #1 | 1 | #1 | ||
| #2 | 4 | #2 | ||
| #3 | 10 | / | ||
| #4 | 15 | |||
| #5 | 30 | |||
| #6 | 6 | #5 | ||
| #7 | 14 | #3、#5 | ||
| #8 | 16 | #6 | ||
| #9 | 4 | #4、#7、#8 |
对于子任务#4,保证在值域内等概率随机。
对于全部数据,满足。