zoukankan      html  css  js  c++  java
  • 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;
    
    }
  • 相关阅读:
    AdminLTE组件之表格DataTable
    爬虫:通过滑动或者点触验证码的方法及实现(点触+滑动)
    爬虫:滑动验证解决方法及python实现
    django文件上传地址以及media的设置
    基于cropper和sweetalert的简单图片/头像裁剪上传
    学写网站(二)前端配置之glup
    轩辕剑陆和外传平台版设置功能
    植物大战僵尸
    仙剑类更新
    VSCode注册关联自定义类型文件
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/10043281.html
Copyright © 2011-2022 走看看