zoukankan      html  css  js  c++  java
  • 图书管理

    题目描述

    思路

    使用字符串产生两个哈希值,一个哈希值决定链表的头,另一个哈希值决定在某个链表头的后面的某个位置。

    代码

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    int n;
    char a[10], b[209];
    int bs = 37, h1 = 90001, h2 = 90007;
    int head[90001], nxt[30005], ver[30005], ht;
    int res1, res2, len;
    
    bool find(int x, int y) {
    	for (int i = head[x]; i; i = nxt[i]) {
    		if (ver[i] == y) return true;
    	}
    	return false;
    }
    
    void add(int x, int y) {
    	if (!find(x, y)) {
    		nxt[++ht] = head[x];
    		ver[ht] = y;
    		head[x] = ht;
    	}
    }
    
    
    int main() {
    	// 产生哈希表的两个数
    	// int cnt = 0;
    	// for (int i = 90001; cnt < 2; i += 2) {
    		// bool flag = false;
    		// for (int j = 3; j <= sqrt(i); ++j) {
    			// if (i % j == 0) flag = true;
    		// }
    		// if (!flag) {
    			// printf("%d
    ", i);
    			// cnt++;
    		// }
    	// }
    	scanf("%d", &n);
    	for (int i = 1; i <= n; ++i) {
    		scanf("%s", a);
    		gets(b + 1);
    		len = strlen(b + 1);
    		res1 = 0, res2 = 0;
    		for (int i = 1; i <= len; ++i) {
    			res1 = ((long long)res1 * bs % 90001 + b[i]) % 90001;
    			res2 = ((long long)res2 * bs % 90007 + b[i]) % 90007;
    		}
    		if (strcmp(a, "add") == 0) {
    			add(res1, res2);
    		} else {
    			if (find(res1, res2)) puts("yes");
    			else puts("no");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    马拦过河卒
    最小生成树 kruskal算法
    链表,关键是结构体的快排
    Shortest Prefixes 字典树
    串的匹配
    A Beautiful Meadow
    Tiling
    邻接矩阵的宽度遍历
    邻接矩阵的深度遍历
    Form1.frm
  • 原文地址:https://www.cnblogs.com/liuzz-20180701/p/11484283.html
Copyright © 2011-2022 走看看