• HDOJ1800(哈希)


    大意:教士兵飞扫帚,例 5名士兵ABCDE水平为2 4 5 6 4。

    C教B,B教A,A,B,C,用一把扫帚,D教E,D,E用一把扫帚。求需要最小数目的扫帚。(士兵的级别数小于30位)

    分析;只需要求出某个值出现最多的次数。位数过大所以hash,开放地址法解决冲突。

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define maxn 7003
    using namespace std;
    int hashn[maxn], countn[maxn], n;
    int maxit;
    int ELFhash(char *key)//字符串hash
    {
    	long long h = 0;
    	long long g;
    	while (*key)
    	{
    		h = (h << 4) + *key++;
    		g = h & 0xf0000000L;
    		if (g)
    			h^= g >> 24;
    		h &= ~g;
    	}
    	return h;
    }
    void hashit(char *s)
    {
    	int k;
    	while (*s == '0')
    		s++;
    	k = ELFhash(s);
    	int t = k%maxn;
    	while (hashn[t] != k&&hashn[t] != -1)
    		t = (t + 10) % maxn;//开放地址法解决冲突
    	if (hashn[t] == -1)
    	{
    		countn[t] = 1;
    		hashn[t] = k;
    	}
    	else if (++countn[t] > maxit)
    		maxit = countn[t];
    	return;
    }
    int main()
    {
    	//freopen("C:\in.txt", "r", stdin);
    	char str[100];
    	while (~scanf("%d",&n))
    	{
    		memset(hashn, -1, sizeof(hashn));
    		getchar();
    		maxit = 1;
    		for (int i = 0; i < n; i++)
    		{
    			gets(str);
    			hashit(str);
    		}
    		printf("%d
    ", maxit);
    	}
    	return 0;
    }

  • 相关阅读:
    AutoIT练习
    AutoIT键盘鼠标模拟组件
    javascript class 定义
    JIRA
    vs 命令窗口 常用命令
    jquery 获取参数 plugin
    THE VALUE OF TIME
    哈佛图书馆的二十条训言
    优秀javascript js组件集锦
    UVA 11205 The broken pedometer
  • 原文地址:https://www.cnblogs.com/nickqiao/p/7583396.html
Copyright © 2020-2023  润新知