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范围内。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define mod 23333
  5. #define maxn 200010
  6.  
  7. using namespace std;
  8. int a[maxn],n,c,cnt[maxn],head[maxn],num,ans;
  9. struct node
  10. {
  11. int from;
  12. int to;
  13. int next;
  14. }e[maxn<<];
  15.  
  16. void insert(int x)
  17. {
  18. int ha=(x%mod+x/mod)%mod;
  19. for(int i=head[ha];i;i=e[i].next)
  20. if(e[i].to==x)
  21. {
  22. cnt[i]++;
  23. return;
  24. }
  25. e[++num].to=x;
  26. e[num].next=head[ha];
  27. head[ha]=num;cnt[num]++;
  28. }
  29.  
  30. int Query(int x)
  31. {
  32. int ha=(x%mod+x/mod)%mod;
  33. for(int i=head[ha];i;i=e[i].next)
  34. if(e[i].to==x) return cnt[i];
  35. return ;
  36. }
  37.  
  38. int main()
  39. {
  40. freopen("dec.in","r",stdin);
  41. freopen("dec.out","w",stdout);
  42. scanf("%d%d",&n,&c);
  43. for(int i=;i<=n;i++)
  44. {
  45. scanf("%d",&a[i]);
  46. int s=a[i]+c;
  47. insert(s);
  48. }
  49. for(int i=;i<=n;i++)
  50. ans+=Query(a[i]);
  51. printf("%d\n",ans);
  52. return ;
  53. }

心若向阳,无谓悲伤

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处分通报.保证不重名。

【样例输入】

  1. 3
  2. Dazui
  3. Erge
  4. Dapigu
  5. 2
  6. Varpro
  7. Erge

【样例输出】

  1. 1
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define maxn 500010
  5. #define ha 119
  6. #define HA 33
  7. #define mod 233333
  8. #define MOD 100007
  9.  
  10. using namespace std;
  11. int n,m,ans,l,num,cnt[maxn],head[maxn];
  12. char s[];
  13. struct node{
  14. int to,pre;
  15. }e[maxn];
  16.  
  17. void insert(int x,int y)
  18. {
  19. for(int i=head[x];i;i=e[i].pre)
  20. if(e[i].to==y){
  21. cnt[i]++;return;
  22. }
  23. num++;e[num].to=y;
  24. e[num].pre=head[x];
  25. head[x]=num;cnt[num]++;
  26. }
  27.  
  28. int Query(int x,int y)
  29. {
  30. for(int i=head[x];i;i=e[i].pre)
  31. if(e[i].to==y)return cnt[i];
  32. return ;
  33. }
  34.  
  35. int main()
  36. {
  37. freopen("mtest.in","r",stdin);
  38. freopen("mtest.out","w",stdout);
  39. scanf("%d",&n);
  40. for(int i=;i<=n;i++)
  41. {
  42. scanf("%s",s);
  43. l=strlen(s);
  44. int t=,T=;
  45. for(int j=;j<l;j++)
  46. {
  47. t=t*ha+s[j]-'A';t%=mod;
  48. T=T*HA+s[j]-'A';T%=MOD;
  49. }
  50. insert(t,T);
  51. }
  52. scanf("%d",&m);
  53. for(int i=;i<=m;i++)
  54. {
  55. scanf("%s",s);
  56. l=strlen(s);
  57. int t=,T=;
  58. for(int j=;j<l;j++){
  59. t=t*ha+s[j]-'A';t%=mod;
  60. T=T*HA+s[j]-'A';T%=MOD;
  61. }
  62. ans+=Query(t,T);
  63. }
  64. printf("%d\n",ans);
  65. return ;
  66. }

我现在很悲伤

  1. 找不到水题了233333

hash练习们的更多相关文章

  1. 复杂的 Hash 函数组合有意义吗?

    很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...

  2. 对抗密码破解 —— Web 前端慢 Hash

    (更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...

  3. 散列表(hash table)——算法导论(13)

    1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...

  4. hash表长度优化证明

    hash表冲突的解决方法一般有两个方向: 一个是倾向于空间换时间,使用向量加链表可以最大程度的在节省空间的前提下解决冲突. 另外一个倾向于时间换空间,下面是关于这种思路的一种合适表长度的证明过程: 这 ...

  5. SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)

    前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...

  6. C# salt+hash 加密

    一.先明确几个基本概念 1.伪随机数:pseudo-random number generators ,简称为:PRNGs,是计算机利用一定的算法来产生的.伪随机数并不是假随机 数,这里的" ...

  7. SQL 提示介绍 hash/merge/concat union

    查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...

  8. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  9. 巧用location.hash保存页面状态

    在我们的项目中,有大量ajax查询表单+结果列表的页面,由于查询结果是ajax返回的,当用户点击列表的某一项进入详情页之后,再点击浏览器回退按钮返回ajax查询页面,这时大家都知道查询页面的表单和结果 ...

  10. redis数据结构详解之Hash(四)

    序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中的索引 ...

随机推荐

  1. 第3章 从Flux到Redux

    第3章 从Flux到Redux 3.1 Flux 单向数据流,React是用来替换Jquery的,Flux是以替换Backbone.js.Ember.js等MVC框架为主的. actionTypes. ...

  2. 洛谷——P2047 [NOI2007]社交网络

    P2047 [NOI2007]社交网络 $Floyd$,一眼看到就是他(博主是不小心瞄到了这个题的标签吧qwq) 这个题目只要预处理出$S$到$T$的最短路的条数即可,类似$Spfa$的更新方法 如果 ...

  3. ROS lesson 1

    ROS ROS官网 ROS 简介 ROS 是 Robot Operation System 的简写,并且 他诞生在2000年后,至今有10余年了,运行在 Linux(Ubuntu) 上 ROS 不是 ...

  4. eclipse自动换行

    Eclipse是一款非常优秀的IDE,但是不能自动换行,需要安装一个插件完成这个功能. 安装办法有两种: 1.在线安装. 选择help-->install new software,点击Add, ...

  5. 基于element UI 的上传插件

    为了不再重复的上传文件,做了一个统一选择文件和上传文件的 基于 element UI :http://element-cn.eleme.io 前端实现文件下载和拖拽上传 演示 用法 <uploa ...

  6. java 十六周总结

  7. java 反射运用

    一,获取私有的属性,方法,构造器(俗名:暴力反射) 现有一个类,属性,方法,构造器均为私有的,如何创建实例对象,更该属性值,调用方法? public class Student { private S ...

  8. Hello Shiro

    [HelloWorld Shiro] 1.搭建开发环境-加入jar包 2.步骤(前提:已下载好Shiro资源包): ①找到shiro-root-1.2.3-source-release包, ②按Apa ...

  9. [luoguP1417] 烹调方案(背包DP)

    传送门 By tinylic 如果没有b[i]这个属性的话就是明显的01背包问题. 现在考虑相邻的两个物品x,y.假设现在已经耗费p的时间,那么分别列出先做x,y的代价: a[x]-(p+c[x])* ...

  10. [luoguP1029] 最大公约数和最小公倍数问题(数论)

    传送门 一.暴力枚举(加了点优化) #include <cstdio> int x, y, ans; inline int gcd(int x, int y) { return !y ? ...