洛谷P1102 A-B数对
洛谷P1102 A-B数对
https://www.luogu.org/problem/show?pid=1102
题目描述
出题是一件痛苦的事情!
题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈!
好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。(不同位置的数字一样的数对算不同的数对)
输入输出格式
输入格式:
第一行包括2个非负整数N和C,中间用空格隔开。
第二行有N个整数,中间用空格隔开,作为要求处理的那串数。
输出格式:
输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
对于90%的数据,N <= 2000;
对于100%的数据,N <= 200000。
所有输入数据都在longint范围内。
输入输出样例
4 1
1 1 2 3
3
为什么用代码中注释掉的hash方式不对呢?
求助路过大佬
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define in long long
#define mo 20047
#define mo2 13831
using namespace std;
struct node
{
in cs;
in next;
in to;
}edge[];
in ans,tot,head[],a[],i,j,n,c,b;
in qr()
{
in x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-') x=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
f=f*+(in)ch-;
ch=getchar();
}
return x*f;
}
in get_hash1(in k)
{
/*in h=0;
while(k)
{
h=(h*33+k)%mo;
k/=10;
}*/
return k*%mo;
}
in get_hash2(in q)
{
/*in h=0;
while(q)
{
h=(h*53+q)%mo2;
q/=10;
}*/
return q*%mo2;
}
void lj(in from,in to)
{
for(int l=head[from];l;l=edge[l].next)
{
if(edge[l].to==to)
{
edge[l].cs++;
return;
}
}
tot++;
edge[tot].next=head[from];
edge[tot].to=to;
head[from]=tot;
edge[tot].cs++;
}
void add(in u,in v)
{
if(head[u])
lj(u,v);
else
{
tot++;
edge[tot].next=head[u];
edge[tot].to=v;
head[u]=tot;
edge[tot].cs++;
}
}
int query(in u,in v)
{
for(j=head[u];j;j=edge[j].next)
{
if(edge[j].to==v)
return edge[j].cs;
}
return ;
}
int main()
{
n=qr();c=qr();
for(i=;i<n;++i)
{
a[i]=qr();
in x=get_hash1(a[i]);
in y=get_hash2(a[i]);
add(x,y);
}
for(i=;i<n;++i)
{
b=c+a[i];
in y=get_hash1(b);
in z=get_hash2(b);
ans+=query(y,z);
}
cout<<ans;
return ;
}
洛谷P1102 A-B数对的更多相关文章
- 洛谷 P1102 A−B数对
题目描述 出题是一件痛苦的事情! 题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的 A+BA+BA+B ProblemProblemProblem ,改用 A−BA-BA−B 了哈哈! 好吧,题目是这 ...
- 洛谷:P3281 [SCOI2013]数数 (优秀的解法)
刷了这么久的数位 dp ,照样被这题虐,还从早上虐到晚上,对自己无语...(机房里又是只有我一个人,寂寞.) 题目:洛谷P3281 [SCOI2013]数数 题目描述 Fish 是一条生活在海里的鱼, ...
- 【洛谷p1012】拼数
(今天yuezhuren大课间放我们出来了……) (另外今天回了两趟初中部) 拼数[传送门] 洛谷算法标签: (然鹅这两个学的都不好,能过真的how strange) 开始的时候没读题啊,直接暴力so ...
- 【洛谷p1106】删数问题
(洛谷t2755暂时过不去了) 删数问题[传送门] 洛谷算法标签: emmmm……删数问题又牵扯到了字符串.因为毕竟高精度的数240位呢!要是输入一个整型,要码240行来求出每一位……怕是还没求出来就 ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- 洛谷P4587 [FJOI2016]神秘数(主席树)
题面 洛谷 题解 考虑暴力,对于询问中的一段区间\([l,r]\),我们先将其中的数升序排序,假设当前可以表示出\([1,k]\)目前处理\(a_i\),假如\(a_i>k+1\),则答案就是\ ...
- DP,数论————洛谷P4317 花神的数论题(求1~n二进制中1的个数和)
玄学代码(是洛谷题解里的一位dalao小粉兔写的) //数位DP(二进制)计算出f[i]为恰好有i个的方案数. //答案为∏(i^f[i]),快速幂解决. #include<bits/stdc+ ...
- BZOJ1026或洛谷2657 [SCOI2009]windy数
BZOJ原题链接 洛谷原题链接 简单的数位\(DP\),套模板就好. #include<cstdio> #include<cstring> using namespace st ...
- 洛谷P4317 花神的数论题
洛谷题目链接 数位$dp$ 我们对$n$进行二进制拆分,于是就阔以像十进制一样数位$dp$了,基本就是套模板.. 接下来是美滋滋的代码时间~~~ #include<iostream> #i ...
随机推荐
- gdb调试器学习链接
首先要带 -g 选项用gcc编译 常用指令:http://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html#gdb 带main的命令行参 ...
- 程序开发入门工具之CodeBlocks
程序开发基础工具之CodeBlocks 作为程序开发工作者,我们会接触很多的程序开发软件:但实用以及容易掌握的程序开发软件对于初学者的学习能力是有一定的加成的.今天我就作为一个程序开发者给大家推荐一个 ...
- iOS-UICollectionViewLayout方法介绍
注意:UICollectionView的自定义功能就是自己去实现UICollectionViewLayout的子类,然后重写相应的方法来实现Cell的布局 1.当布局首次被加载时会调用prepareL ...
- Redis有序集内部实现原理分析(二)
Redis技术交流群481804090 Redis:https://github.com/zwjlpeng/Redis_Deep_Read 本篇博文紧随上篇Redis有序集内部实现原理分析,在这篇博文 ...
- C++编译与链接(1)-编译与链接过程
大家知道计算机使用的一系列的1和0 那个一个C++语言程序又是如何从一个个.h和.cpp文件变成包含1和0的可执行文件呢? 可以认为有以下的几个环节 源程序->预处理->编译和优化-> ...
- js访问对象属性的两种方法
var obj={name:'fuuf',age:19} 第一种,用.访问 obj.name 第二种 用[]访问 obj['name'] //此时name是字符串,要加引号 注意事项 使用第二种方法 ...
- js数组遍历 千万不要使用for...in...
昨天做个下拉框 扩充了一下数组的方法 Array.prototype.remove = function (val) { var index = this.indexOf(val); if (inde ...
- Beta版本测试第二天
一. 每日会议 1. 照片 2. 昨日完成工作 登入界面的优化与注册界面的优化,之前的登入界面与注册界面没有设计好,使得登入界面与注册界面并不好看,这次对界面进行了优化.另外尝试了找回密码的功能. 3 ...
- 【Leetcode】143. Reorder List
Question: Given a singly linked list L: L0→L1→…→Ln-1→Ln, reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You ...
- linux 无交互生成ssh rsa免秘证书
[root@xxx tmp]# man ssh-keygen NAME ssh-keygen - authentication key generation, management and conve ...