• hash练习们


    610. 数对的个数

    ★★   输入文件:dec.in   输出文件:dec.out   简单对比
    时间限制:1 s   内存限制:128 MB

    Description
    出题是一件痛苦的事情!
    题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈!

    好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。

    (不同位置的数字一样的数对算不同的数对)
    Input Format
    第一行包括2个非负整数N和C,中间用空格隔开。
    第二行有N个整数,中间用空格隔开,作为要求处理的那串数。
    Output Format
    输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
    Sample Input
    4 1
    1 1 2 3
    Sample Output
    3
    Data Limit
    对于90%的数据,N <= 2000;
    对于100%的数据,N <= 200000。
    所有输入数据都在longint范围内。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define mod 23333
    #define maxn 200010
    
    using namespace std;
    int a[maxn],n,c,cnt[maxn],head[maxn],num,ans;
    struct node
    {
        int from;
        int to;
        int next;
    }e[maxn<<1];
    
    void insert(int x)
    {
        int ha=(x%mod+x/mod)%mod;
        for(int i=head[ha];i;i=e[i].next)
          if(e[i].to==x) 
          {
              cnt[i]++;
              return;
          }
        e[++num].to=x;
        e[num].next=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].next)
          if(e[i].to==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]);
            int s=a[i]+c; 
            insert(s);
        }
        for(int i=1;i<=n;i++)
            ans+=Query(a[i]);
        printf("%d
    ",ans);
        return 0;
    }
    心若向阳,无谓悲伤

    1176. [郑州101中学] 月考

    ★   输入文件:mtest.in   输出文件:mtest.out   简单对比
    时间限制:1 s   内存限制:128 MB

    【题目描述】

    在上次的月考中Bugall同学违反了考场纪律还吃了处分,更可气的是在第二天的校会时
     间学校就此事做了全校通报. 现已知在当天校会时间有总共N个同学听到了有关Bugall的处分决定.
     
     Bugall同学在铁一有M个朋友,这M个人中有的可能听到了当天的处分决定,有的可能没
     有听到,现在Bugall同学想知道他有几个朋友听到了当天的处分通报.

    【输入格式】

    第一行为一个整数N,从第2行到N+1行,每行用一个长度不超过200的字符串表示
     一个人的名字.
      第N+2行为一个整数M,从第N+3行到N+M+2行,每行用一个长度不超过200的字符
     串表示Bugall同学一个朋友的名字.

    【输出格式】

    输出有几个Bugall同学的铁一朋友在当天的校会时间听到了Bugall处分通报.保证不重名。

    【样例输入】

    3
    Dazui
    Erge
    Dapigu
    2
    Varpro
    Erge
    

    【样例输出】

    1

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 500010
    #define ha 119
    #define HA 33
    #define mod 233333
    #define MOD 100007
    
    using namespace std;
    int n,m,ans,l,num,cnt[maxn],head[maxn];
    char s[205];
    struct node{
        int to,pre;
    }e[maxn];
    
    void insert(int x,int y)
    {
        for(int i=head[x];i;i=e[i].pre)
            if(e[i].to==y){
                cnt[i]++;return;    
            }
        num++;e[num].to=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].to==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;
    }
    我现在很悲伤
    找不到水题了233333
    折花枝,恨花枝,准拟花开人共卮,开时人去时。 怕相思,已相思,轮到相思没处辞,眉间露一丝。
  • 相关阅读:
    XML-Signature 语法和签名
    ZooKeeper相关资料集锦
    分布式锁
    spring-boot 知识集锦
    Spring boot druid 多数据源配置
    常见 SQL 语句的加锁分析
    fastjson反序列化多层嵌套泛型类与java中的Type类型
    Clean ThreadLocals
    java AOP Before, After, AfterReturning, AfterThrowing, or Around 注解
    java 线程间的通信 (wait / notify / notifyAll)
  • 原文地址:https://www.cnblogs.com/L-Memory/p/6378243.html
Copyright © 2020-2023  润新知