首页 > 其他分享 >洛谷 P1102 A-B 数对

洛谷 P1102 A-B 数对

时间:2025-01-01 12:02:13浏览次数:3  
标签:正整数 P1102 题目 ++ ll 数对 key 洛谷

题目:

P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态

题目背景

出题是一件痛苦的事情!

相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

题目描述

给出一串正整数数列以及一个正整数 C,要求计算出所有满足 A−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

第一行,两个正整数 N,C。

第二行,N 个正整数,作为要求处理的那串数。

输出格式

一行,表示该串正整数中包含的满足 A−B=C 的数对的个数。

输入输出样例

输入 #1复制

4 1
1 1 2 3

输出 #1复制

3

说明/提示

对于 75%的数据,1≤N≤2000。

对于 100% 的数据,1≤N≤2×105,0≤ai<230,1≤C<230。

2017/4/29 新添数据两组

思路:

换一种思路,A-B=C变成A-C=B。也就是A出现的次数乘以(A-C)出现的次数。

代码如下:

#include <iostream>
#include <unordered_map>
using namespace std;
typedef long long ll;

int main() 
{
    ll N, C; 
    cin >> N >> C; 
    unordered_map<ll, ll> k;
    ll ans = 0; 

    for (ll i = 0; i < N; i++) 
	{
        ll t;
        cin >> t;
        k[t]++;
    }

    for (auto it = k.begin(); it != k.end(); it++) 
	{
		ll key = it -> first;
		if (k.find(key - C) != k.end())//查找key-C,是否存在 
        ans += k[key] * k[key - C]; // 直接访问并累加,如果key - C不存在则结果为0
    }

    cout << ans << endl;

    return 0;
}

标签:正整数,P1102,题目,++,ll,数对,key,洛谷
From: https://blog.csdn.net/zqystca/article/details/144865017

相关文章

  • 洛谷题单指南-线段树的进阶用法-P4587 [FJOI2016] 神秘数
    原题链接:https://www.luogu.com.cn/problem/P4587题意解读:对于序列a[n],查询m个区间[l,r]数值对应集合的神秘数。集合S 的神秘数定义为最小的不能被 S的子集的和表示的正整数。解题思路:对于区间[l,r],从小到大将数值选入集合,来观察神秘数的变化,设S当前的神秘数为ans。当下一......
  • 2024.12.29 洛谷月赛总结
    T125min推完+做完基本思路:看到这种有代价产生方式的,去思考代价如何产生,发现要么相等不用操作,要么可以直接改为2^n-1再改为t代码:#include<bits/stdc++.h>usingnamespacestd;longlongn,s,t,ans,T;intmain(){ scanf("%d",&T); while(T--){ scanf("%d%d%d",&n,&s,&t);......
  • 洛谷B3846[GESP样题 一级] 闰年求和
    原理本题的核心在于判断给定区间内的哪些年份是闰年,并将这些闰年对应的年份数值进行求和。判断闰年的规则是:能被4整除但不能被100整除的年份为闰年,此外能被400整除的年份也是闰年。程序通过循环遍历给定区间内的每一个年份,按照上述闰年判断规则筛选出闰年,然后将闰年的年......
  • leetcode1803 统计异或值在范围内的数对有多少
    给定数组nums[n]和两个整数low与high,问有多少对(i,j)满足0<=i<j<n,并且low<=(nums[i]^nums[j])<=high。1<=n<=2E4;1<=nums[i]<=2E4;1<=low<=high<=2E4分析:1、把区分问题拆分为两部分,记f(x)表示不超过x的个数,那么f(high)-f(low-1)就是答案,只需要实现f(x)即可。2、从......
  • leetcode2935 找出强数对的最大异或值II
    给定数组nums[n],如果一对整数x和y满足|x-y|<=min(x,y),则称其为强数对。需要从nums[n]中选出一个强数对,并且异或结果最大。1<=n<=5E4;1<=nums[i]<2^20分析:trie+双指针。不妨设x<=y,对|x-y|<=min(x,y)变形得:x<=y<=2x,也就是说只能在[x,2x]范围内选择,可以用双指针来维护有效范围。/......
  • 006. 滑动窗口 /【模板】单调队列(洛谷P1886)
    006.滑动窗口/【模板】单调队列(洛谷P1886)题目描述有一个长为\(n\)的序列\(a\),以及一个大小为\(k\)的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如,对于序列\([1,3,-1,-3,5,3,6,7]\)以及\(k=3\),有如下过程:\[\def\a......
  • 007. 求m区间内的最小值(洛谷P1440)
    007.求m区间内的最小值(洛谷P1440)题目描述一个含有\(n\)项的数列,求出每一项前的\(m\)个数到它这个区间内的最小值。若前面的数不足\(m\)项则从第\(1\)个数开始,若前面没有数则输出\(0\)。输入格式第一行两个整数,分别表示\(n\),\(m\)。第二行,\(n\)个正整数,为所给定的......
  • 洛谷 P8773 [蓝桥杯 2022 省 A] 选数异或 做题记录
    前置芝士:无?思路搜线段树的tag找到了一道非线段树题(因为\(\oplus\)是可逆的,即我们既可以\(a\oplusb=c\)同时也有\(a\oplusc=b\)。那么这启示我们,一个数\(a\)可以匹配的数一定为\(a\oplusx\)。我们用\(lst\)记录每一个元素最后出现的位置,设\(f_i\)为右......
  • 004. [NOIP2017 提高组] 机器翻译(洛谷P1540)
    004.[NOIP2017提高组]机器翻译(洛谷P1540)题目背景NOIP2010提高组T1题目描述小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查......
  • 005. [NOIP2017 提高组] 时间复杂度(洛谷P3952)
    005.[NOIP2017提高组]时间复杂度(洛谷P3952)题目背景NOIP2017提高组D1T2题目描述小明正在学习一种新的编程语言A++,刚学会循环语句的他激动地写了好多程序并给出了他自己算出的时间复杂度,可他的编程老师实在不想一个一个检查小明的程序,于是你的机会来啦!下面请你编写程序......