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<<]; 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 ;
} int main()
{
freopen("dec.in","r",stdin);
freopen("dec.out","w",stdout);
scanf("%d%d",&n,&c);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
int s=a[i]+c;
insert(s);
}
for(int i=;i<=n;i++)
ans+=Query(a[i]);
printf("%d\n",ans);
return ;
}
心若向阳,无谓悲伤
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[];
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 ;
} int main()
{
freopen("mtest.in","r",stdin);
freopen("mtest.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%s",s);
l=strlen(s);
int t=,T=;
for(int j=;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=;i<=m;i++)
{
scanf("%s",s);
l=strlen(s);
int t=,T=;
for(int j=;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\n",ans);
return ;
}
我现在很悲伤
找不到水题了233333
hash练习们的更多相关文章
- 复杂的 Hash 函数组合有意义吗?
很久以前看到一篇文章,讲某个大网站储存用户口令时,会经过十分复杂的处理.怎么个复杂记不得了,大概就是先 Hash,结果加上一些特殊字符再 Hash,结果再加上些字符.再倒序.再怎么怎么的.再 Hash ...
- 对抗密码破解 —— Web 前端慢 Hash
(更新:https://www.cnblogs.com/index-html/p/frontend_kdf.html ) 0x00 前言 天下武功,唯快不破.但在密码学中则不同.算法越快,越容易破. ...
- 散列表(hash table)——算法导论(13)
1. 引言 许多应用都需要动态集合结构,它至少需要支持Insert,search和delete字典操作.散列表(hash table)是实现字典操作的一种有效的数据结构. 2. 直接寻址表 在介绍散列 ...
- hash表长度优化证明
hash表冲突的解决方法一般有两个方向: 一个是倾向于空间换时间,使用向量加链表可以最大程度的在节省空间的前提下解决冲突. 另外一个倾向于时间换空间,下面是关于这种思路的一种合适表长度的证明过程: 这 ...
- SQL Server-聚焦查询计划Stream Aggregate VS Hash Match Aggregate(二十)
前言 之前系列中在查询计划中一直出现Stream Aggregate,当时也只是做了基本了解,对于查询计划中出现的操作,我们都需要去详细研究下,只有这样才能对查询计划执行的每一步操作都了如指掌,所以才 ...
- C# salt+hash 加密
一.先明确几个基本概念 1.伪随机数:pseudo-random number generators ,简称为:PRNGs,是计算机利用一定的算法来产生的.伪随机数并不是假随机 数,这里的" ...
- SQL 提示介绍 hash/merge/concat union
查询提示一直是个很有争议的东西,因为他影响了sql server 自己选择执行计划.很多人在问是否应该使用查询提示的时候一般会被告知慎用或不要使用...但是个人认为善用提示在不修改语句的条件下,是常用 ...
- 对一致性Hash算法,Java代码实现的深入研究
一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...
- 巧用location.hash保存页面状态
在我们的项目中,有大量ajax查询表单+结果列表的页面,由于查询结果是ajax返回的,当用户点击列表的某一项进入详情页之后,再点击浏览器回退按钮返回ajax查询页面,这时大家都知道查询页面的表单和结果 ...
- redis数据结构详解之Hash(四)
序言 Hash数据结构累似c#中的dictionary,大家对数组应该比较了解,数组是通过索引快速定位到指定元素的,无论是访问数组的第一个元素还是最后一个元素,所耗费的时间都是一样的,但是数组中的索引 ...
随机推荐
- Luogu P4316 绿豆蛙的归宿
P4316 绿豆蛙的归宿 题意翻译 「Poetize3」 题目背景 随着新版百度空间的上线,Blog宠物绿豆蛙完成了它的使命,去寻找它新的归宿. 题目描述 给出一个有向无环图,起点为1终点为N,每条边 ...
- python3.x Day3 集合
python中的集合 集合定义:一个无序的去重的数据集,主要特性就是去重和关系测试,关系测试不改变集合中的数据值 定义集合:set(list) 可以将list转化为集合set 示例: 定义一个集合:l ...
- angular中处理多个异步请求的方法汇总
在实际业务中经常需要等待几个请求完成后再进行下一步操作.但angularjs中$http不支持同步的请求. 解决方法一: $http多层嵌套 $http.get('url1').success(fun ...
- vue 添加axios解决post传参数为null问题
本文主要参考: https://www.npmjs.com/package/axios http://jingyan.baidu.com/article/29697b916d6a7bab20de3cf ...
- poj 2404 中国邮递员问题 欧拉回路判定+状压dp
/* 状压dp 邮递员问题:求经过任意点出发经过每一条边一次并回到原点. 解法:1.如果是欧拉回路那么就是所有的边的总和. 2.一般的解法,找出所有的奇度顶点,任意两个顶点匹配,即最小完美匹配,可用状 ...
- 五语言学习系列 C,C++,Objective-C,Java,C# (一)历史
C:由AT&T贝尔实验室的Dennis Ritchie于1972年创建的,是专为开发者设计的语言. C++:在C基础上,1983年又由贝尔实验室的Bjarne Strou-strup推出了C+ ...
- Ubuntu下使用Sysvinit实现自定义服务(简单研究)
通过上一篇文章http://www.cnblogs.com/EasonJim/p/7168216.html可以大概了解到Sysvinit的历史. 其实在自定义服务上,使用Sysvinit是最简单的,本 ...
- Ubuntu 16.04安装uGet替代迅雷,并在Chrome中设置为默认下载器
uGet是采用aria2作为下载后端,所以两个软件都必须同时安装. 1.安装uGet sudo add-apt-repository ppa:plushuang-tw/uget-stable sudo ...
- Node & Express: some tips
1. 设置Express端口号: 在app.js中添加 app.set('port', process.env.PORT || 3000); 之后命令行中打入 PORT=1234 node app.j ...
- linux sed 命令的用法
原文 http://blog.chinaunix.net/uid-24426415-id-77244.html ------------------------------------------- ...