• hash练习


    /*COGS 610 */
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define mod 23333
    #define maxn 200010
    using namespace std;
    int a[maxn],n,c,head[maxn],cnt[maxn],num,ans;
    struct node{
        int v,pre;
    }e[maxn];
    void Insert(int x){
        int ha=(x%mod+x/mod)%mod;
        for(int i=head[ha];i;i=e[i].pre)
            if(e[i].v==x){
                cnt[i]++;
                return;
            }
        num++;e[num].v=x;
        e[num].pre=head[ha];
        head[ha]=num;cnt[num]++;
    }
    int Query(int x){
        int ha=(x%mod+x/mod)%mod;
        for(int i=head[ha];i;i=e[i].pre)
            if(e[i].v==x)return cnt[i];
        return 0;
    }
    int main()
    {
        freopen("dec.in","r",stdin);
        freopen("dec.out","w",stdout);
        scanf("%d%d",&n,&c);
        for(int i=1;i<=n;i++)
            scanf("%d",&a[i]);
        for(int i=1;i<=n;i++){
            int s=a[i]+c;
            Insert(s);
        }
        for(int i=1;i<=n;i++)
            ans+=Query(a[i]);
        printf("%d
    ",ans);
        return 0;
    }
    /*COGS 1176*/
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 500010
    #define ha 119
    #define HA 31
    #define mod 233333
    #define MOD 100007
    using namespace std;
    int n,m,num,head[maxn],l,ans,cnt[maxn];
    char s[250];
    struct node{
        int v,pre;
    }e[maxn];
    void Insert(int x,int y){
        for(int i=head[x];i;i=e[i].pre)
            if(e[i].v==y){
                cnt[i]++;return;    
            }
        num++;e[num].v=y;
        e[num].pre=head[x];
        head[x]=num;cnt[num]++;
    }
    int Query(int x,int y){
        for(int i=head[x];i;i=e[i].pre)
            if(e[i].v==y)return cnt[i];
        return 0;
    }
    int main()
    {
        freopen("mtest.in","r",stdin);
        freopen("mtest.out","w",stdout);
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            scanf("%s",s);
            l=strlen(s);
            int t=0,T=0;
            for(int j=0;j<l;j++){
                t=t*ha+s[j]-'A';t%=mod;
                T=T*HA+s[j]-'A';T%=MOD;
            }
            Insert(t,T);
        }
        scanf("%d",&m);
        for(int i=1;i<=m;i++){
            scanf("%s",s);
            l=strlen(s);
            int t=0,T=0;
            for(int j=0;j<l;j++){
                t=t*ha+s[j]-'A';t%=mod;
                T=T*HA+s[j]-'A';T%=MOD;
            }
            ans+=Query(t,T);
        }
        printf("%d
    ",ans);
        return 0;
    }
    /*
    COGS 1406 
    虽然没有hash
    但是学了学输出优化 
    */
    #include<cstdio> 
    using namespace std;
    int a[121],x,c[11];
    int init(){
        char s=getchar();int x=0;
        while(s!=EOF&&(s<'0'||s>'9'))s=getchar();
        if(s==EOF)return -1;
        while(s>='0'&&s<='9'){x=x*10+s-'0';s=getchar();}
        return x;
    }
    void Printf(int x){
        int r=0;if(x==0)r++;
        while(x){c[++r]=x%10;x/=10;}
        while(r--)putchar(c[r+1]+'0');
    }
    int main()
    {
        freopen("AgeSort.in","r",stdin);
        freopen("AgeSort.out","w",stdout);
        while((x=init())!=-1)a[x]++;
        for(int i=0;i<=120;i++)
            for(int j=1;j<=a[i];j++){
                Printf(i);putchar(' ');
            }
        return 0;
    }
  • 相关阅读:
    用户自定义控件
    sql 动态行转列
    sql 将表B中不存在表A的数据 插入到表A中
    C#获取键盘和鼠标操作的时间的类
    滚动条加粗和panel,gridControl结合用
    第三项任务——用例建模
    第二项任务——项目需求分析
    第一项任务:团队组建及项目启动
    实验报告(结对项目)
    实验报告(个人项目)
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/5847422.html
Copyright © 2020-2023  润新知