• 11-散列4 Hashing


    Given a hash table of size N, we can define a hash function (. Suppose that the linear probing is used to solve collisions, we can easily obtain the status of the hash table with a given sequence of input numbers.

    However, now you are asked to solve the reversed problem: reconstruct the input sequence from the given status of the hash table. Whenever there are multiple choices, the smallest number is always taken.

    Input Specification:

    Each input file contains one test case. For each test case, the first line contains a positive integer N (≤), which is the size of the hash table. The next line contains N integers, separated by a space. A negative integer represents an empty cell in the hash table. It is guaranteed that all the non-negative integers are distinct in the table.

    Output Specification:

    For each test case, print a line that contains the input sequence, with the numbers separated by a space. Notice that there must be no extra space at the end of each line.

    Sample Input:

    11
    33 1 13 12 34 38 27 22 32 -1 21
    

    Sample Output:

    1 13 12 21 33 34 38 27 22 32
    //参考
    #include <iostream>
    #include <vector>
    #include <queue>
    using namespace std;
    const int N = 1000;
    int num[N], indegree[N];
    struct cmp {
        bool operator()(int i, int j) {
            return num[i] > num[j];
        }
    };
    int main() {
        int i, j, n, m, k, flag = 0;
        scanf("%d", &n);
        vector<vector<int> > g(n);
        priority_queue<int, vector<int>, cmp> q;
        for (i = 0; i < n; i++) 
            scanf("%d", &num[i]);
     
        for (i = 0; i < n; i++) {
            if (num[i] > 0) {
                k = num[i] % n;
                indegree[i] = (i + n - k) % n;
                if (indegree[i]) {
                    for (j = 0; j <= indegree[i]; j++) 
                        g[(k + j) % n].push_back(i);
                }
                else q.push(i);
            }
        }
     
        while (!q.empty()) {
            i = q.top();
            q.pop();
            if (!flag) {
                flag = 1;
                printf("%d", num[i]);
            }
            else printf(" %d", num[i]);
            for (j = 0; j < g[i].size(); j++) {
                if (--indegree[g[i][j]] == 0)
                    q.push(g[i][j]);
            }
        }
        return 0;
    
    }
  • 相关阅读:
    .net core 2.2, new Bitmap出错 The type initializer for 'Gdip' threw an exception
    瑞萨单片机学习笔记(待续)
    Linux-GitLab安装及汉化
    mysql5.7 ibtmp1文件过大
    #和$的区别
    RTP封装h264
    一个项目同时需要向两个地址推送
    git命令
    echart绘制进度条、仪表盘、各种样式的折线图、饼图、环形图、地图等
    前端在实现类似控制台命令行或者告警信息提示时,需要保持滚动条始终停留在最新的信息位置,也就是最底部
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/10043281.html
Copyright © 2020-2023  润新知