当前位置:网站首页>A-B数对问题|UPC-Count Interval|洛谷-P1102A-B数对
A-B数对问题|UPC-Count Interval|洛谷-P1102A-B数对
2022-08-03 05:14:00 【程序的搬运工Hunter】
今天UPC训练赛做到一个题目,本人水平比较低,没想到咋做,经过我队友的提示和洛谷题解的解释,我这道题目过了。
P1102 A-B 数对
题目描述
出题是一件痛苦的事情!
相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!
好吧,题目是这样的:给出一串数以及一个数字 C,要求计算出所有 A - B = C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
输入格式
输入共两行。
第一行,两个整数 N, C。
第二行,N 个整数为需要处理的数据。
输出格式
一行,表示该串数中包含的满足 A - B = C 的数对的个数。
输入:
4 1
1 1 2 3
输出:
3
思路:该题目要求A-B = C的个数,我们可以转化为求A-C = B的个数,那么我们就可以使用map来映射个数。先统计A数组的所有元素出现的个数,然后将A中的元素全部减去C,从头扫一遍看看有多少个元素在A中出现,则有级队A-B=C。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[200001];
map<ll,ll> m;//建立一个数字到出现次数的映射 map<num,times>
//A-B=C --> A-C=B
int main() {
int n;
ll c;
ll ans=0;
cin >> n >> c;
for(int i=1;i<=n;i++) {
cin >> a[i];
m[a[i]]++;
a[i]-=c;
}
for(int i=1;i<=n;i++)
ans+=m[a[i]];
cout << ans << endl;
return 0;
}
UPC-Count Interval
该题就是上面一个题目的变型题,其实很相似的问题
题目描述
Given is a sequence of length N: A=(A1,A2,…,AN ), and an integer K.
How many of the contiguous subsequences of A have the sum of K?
In other words, how many pairs of integers (l,r) satisfy all of the conditions below?
1≤l≤r≤N
Constraints
1≤N≤2×105
|Ai|≤109
|K|≤1015
All values in input are integers.
输入
Input is given from Standard Input in the following format:
N K
A1 A2… AN
输出
Print the answer.
样例输入
【样例1】 6 5 8 -3 5 7 0 -4 【样例2】 2 -1000000000000000 1000000000 -1000000000
样例输出
【样例1】 3 【样例2】 0
思路,这个题目的思路就是将前缀和表示出来,前缀和减去K如果在前面出现过就记一次数。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<ll,ll>mp;
const ll N = 2e5+10;
ll a[N];
ll sum[N];
int main()
{
ll n,k;
mp[0] = 1;
ll cnt = 0;
cin >> n >> k;
for(ll i = 1;i <= n;i++){
cin >> a[i];
sum[i]=sum[i-1]+a[i];
//这和A-B数对不太一样,这边只能统计前面出现过的数字,后面出现的不能统计
//因为是前缀和,不能从他的后面整出答案,所以需要边计算边计数边统计
cnt+=mp[sum[i]-k];//一定要先计数在统计,如果先统计的话,你减0的话会统计上自身;
mp[sum[i]]++;
}
cout << cnt;
}
边栏推荐
猜你喜欢
随机推荐
图的最短路径的核心——松弛技术
celery工作原理图
Djiango第三次培训
快速上手 Mockito 单元测试框架
【CSRF,SSRF,XXE,PHP反序列化,Burpsuite】
【反弹shell与提权】
web安全-命令执行漏洞
【Nmap与Metasploit常用命令】
C语言简单实现三子棋小游戏
建造者模式(Builder Pattern)
详解Nurbs曲线
生活原则。
Djiango第四次培训笔记
Gradle的安装配置
【命令执行与中间件漏洞】
嵌入式-I2C-物理电路图
Kaggle 入门(Kaggle网站使用及项目复现)
ss-3.工程重构
Benchmark 第一篇 了解Benchmark
OptionError: ‘Pattern matched multiple keys‘