洛谷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 ...
随机推荐
- Ubuntu下ssh连接在服务端显示图形界面
Ubuntu下ssh连接在服务端显示图形界面 step1 安装ssh服务 服务端安装运行ssh,在终端运行命令如下: sudo apt-get install openssh-server 在客户端安 ...
- 【CSAPP笔记】5. 汇编语言——数据
本博客对于汇编的介绍基于32位机器的Intel x86系列处理器和IA32指令集,也涉及少部分x86-64.由于汇编知识相对复杂,这里只做简单介绍和记录,详细请参照书本! 数据格式 下面这张表格中体现 ...
- typedef struct bit0 : 1
这句话定义了一个位域,bit0是该位域的域名,而且bit0只占用一个位.位域是指信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.为了节省存储空间,并使处理简便,C语言提供了一种 ...
- C++编译与链接(2)-浅谈内部链接与外部链接
发现每次写技术博客时,都会在文章开头处花费一番功夫 ...从前,有一个程序员....他的名字叫magicsoar 为什么有时会出现aaa已在bbb中重定义的错误? 为什么有时会出现无法解析的外部符号? ...
- Beta阶段 敏捷冲刺day1
一.提供当天站立式会议照片一张: 二. 每个人的工作 (有work item 的ID) (1) 昨天已完成的工作: (2) 今天计划完成的工作: 今天大家一起讨论了一下之后几天的任务,以及如何对网页进 ...
- 刷新dbgrid 而不失去当前行位置
我们有一个Delphi的数据库应用程序,上面有个DBGrid和一个数据集: DBGrid是用来显示来自数据集(查询或表)的数据,根据设计,当您调用已经打开的数据集的Refresh方 法(例如使用DBN ...
- 利用ZooKeeper简单实现分布式锁
1.分布式锁的由来: 在程序开发过程中不得不考虑的就是并发问题.在java中对于同一个jvm而言,jdk已经提供了lock和同步等.但是在分布式情况下,往往存在多个进程对一些资源产生竞争关系,而这些进 ...
- Storm入门到精通(四)---本地实例Demo
单词实时计数 maven项目的结构: 一.Pom.xml [html] view plain copy <project xmlns="http://maven.apache.org/ ...
- Android Room使用详解
使用Room将数据保存在本地数据库 Room提供了SQLite之上的一层抽象, 既允许流畅地访问数据库, 也充分利用了SQLite. 处理大量结构化数据的应用, 能从在本地持久化数据中极大受益. 最常 ...
- 【Learning】常系数线性齐次递推
给定数列前k项\(h_0...h_{k-1}\),其后的项满足:\(h_i=\sum_{i=1}^kh_{i-j}a_i\),其中\(a_1...a_k\)是给定的系数,求\(h_n\) 数据范围小的 ...