zoukankan      html  css  js  c++  java
  • HDU2648:Shopping(DKBR_hash)

    题目链接

    题意: 给出n个字符串,接下来m天,每天每个字符串要增加对应的值,询问“memory”每天的排名

    分析:

    用hash表hash出每个字符串对应得值,然后放入二维数组(防止地址冲突),m天,输入字符串,查找并处理,最后用一个数组记录每次得值

    代码:

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const int mod = 10007;
    struct node
    {
        char s[40];
        int value;
    }a;
    int n,m,x,ret,now_value,now_size,xx,p[10007];
    char s1[40];
    vector<node>g[10007+2];
    int get_hash(char *str)
    {
        int ret=0;
        while(*str) ret=ret*131+*str++;
        return ret&0x7fffffff%mod;
    }
    int main()
    {
        while(scanf("%d",&n)==1)
        {
            for(int i=0;i<10009;++i) g[i].clear();
            for(int i=1;i<=n;++i)
            {
                scanf("%s",s1);
                strcpy(a.s,s1);a.value=0;
                g[get_hash(s1)].push_back(a);
            }
            scanf("%d",&m);
            while(m--)
            {
                int cnt=0;
            for(int i=1;i<=n;++i)
            {
                scanf("%d %s",&x,s1);
                now_value=get_hash(s1);
                now_size=g[now_value].size();
                for(int j=0;j<now_size;++j) if(strcmp(g[now_value][j].s,s1)==0)
                {
                    g[now_value][j].value+=x;
                    ret=g[now_value][j].value;
                    break;
                }
                if(strcmp(s1,"memory")==0) xx=ret;else p[++cnt]=ret;
            }
            int ans=0;
            for(int i=1;i<=cnt;++i) if(p[i]>xx) ans++;
            printf("%d
    ",ans+1);
            }
        }
    }
    View Code

    -END-

                

      

  • 相关阅读:
    mysql的cmd窗口查看数据库信息
    常见抓包工具
    图形数据库
    支付宝支撑双十一4200万次/秒的数据库请求峰值的技术实现
    处理tomcat内存溢出问题
    maven将jar包打如本地仓库命令
    fastJson去掉指定字段
    mybatis insert 返回主键
    maven引入源码
    mysql实现主从复制
  • 原文地址:https://www.cnblogs.com/chendl111/p/5987948.html
Copyright © 2011-2022 走看看