zoukankan      html  css  js  c++  java
  • 【哈希】身份证问题

    #include <stdio.h>
    typedef struct node{
        char name[24];
        char id[19];
        int num;
        node * pre;
        node * next;
    }node;
    node nhs[100004];
    node ihs[100004];
    node ihspool[100004];
    int iindex = 0;
    node * getinew(){
        return &ihspool[iindex++];
    }
    node nhspool[100004];
    int nindex = 0;
    node * getnnew(){
        return &nhspool[nindex++];
    }
    int getikey(char id[19]){
        int x = 0;
        for (int i = 0; i <= 17; i++)
            x = (10 * x + (id[i] - '0')) % 100003;
        return x;
    }
    int getnkey(char name[24]){
        int x = 0;
        for (int i = 0; i <= 22; i++)
            x = (26 * x + (name[i] - 'A')) % 100003;
        return x;
    }
    void inserti(int key, node * newnode){
        node * head = &ihs[key];
        newnode->pre = head;
        newnode->next = head->next;
        head->next = newnode;
        newnode->next->pre = newnode;
        head->num++;
    }
    void insertn(int key, node * newnode){
        node * head = &nhs[key];
        newnode->pre = head;
        newnode->next = head->next;
        head->next = newnode;
        newnode->next->pre = newnode;
        head->num++;
    }
    void init(){
        for (int i = 0; i <= 100003; i++){
            ihs[i].pre = &ihs[i];
            ihs[i].next = &ihs[i];
            ihs[i].num = 0;
            nhs[i].pre = &nhs[i];
            nhs[i].next = &nhs[i];
            nhs[i].num = 0;
        }
    }
    bool isame(char a[19], char b[19]){
        int flag = true;
        for (int i = 0; i <= 17; i++){
            if (a[i] != b[i]){
                flag = false;
                break;
            }
        }
        return flag;
    }
    bool nsame(char a[24], char b[24]){
        int flag = true;
        for (int i = 0; i <= 22; i++){
            if (a[i] != b[i]){
                flag = false;
                break;
            }
        }
        return flag;
    }
    node * searchi(char a[19]){
        int key = getikey(a);
        int x = ihs[key].num;
        node * y = &ihs[key];
        while (x--){
            y = y->next;
            if (isame(a, y->id)) return y;
        }
    }
    int searchn(char name[24]){
        int key = getnkey(name);
        int x = nhs[key].num;
        node * y = &nhs[key];
        int num = 0;
        while (x--){
            y = y->next;
            if (nsame(name, y->name)) num++;
        }
        return num;
    }
    int main(){
        freopen("input.txt", "r", stdin);
        freopen( "result.txt","w",stdout);
        init();
        for (int i = 1; i <= 100000; i++){
            node * newnode=getinew();
            scanf("%s %s", newnode->name,newnode->id);
            int key = getikey(newnode->id);
            inserti(key, newnode);
            node * newnnode = getnnew();
            for (int i = 0; i <= 17; i++)
                newnnode->id[i] = newnode->id[i];
            for (int i = 0; i <= 22;i++)
                newnnode->name[i] = newnode->name[i];
            key = getnkey(newnnode->name);
            insertn(key, newnnode);
        }
        char id[19];
        for (int i = 1; i <= 100000; i++){
            scanf("%s", &id);
            node * newnode = searchi(id);
            printf("%s
    ",newnode->name);
        }
        char name[24];
        for (int i = 1; i <= 100000; i++){
            scanf("%s", &name);
            printf("%d
    ", searchn(name));
        }
    }
  • 相关阅读:
    Java 破解谷歌翻译api,可以实现程序自动化翻译文章
    如何搭建高可用redis架构?
    架构师带你玩转分布式锁
    Java8内存模型—永久代(PermGen)和元空间(Metaspace)
    【SFA官方翻译】使用 Kubernetes、Spring Boot 2.0 和 Docker 的微服务快速指南
    kafka为什么这么优秀!
    讲道理,为什么分布式一定要有Redis?
    Windows系统内存分析工具的介绍
    colspan width issue
    OpenGL ES3 非常好的系列文章
  • 原文地址:https://www.cnblogs.com/lvcoding/p/8072469.html
Copyright © 2011-2022 走看看