蒟蒻刷题日记(一)

博客作者分享了一道洛谷平台上的数学题目,该题目要求计算数列中满足A-B=C的数对数量,且考虑了不同位置数字相同的情况。作者误将问题与LeetCode的经典两数之和问题混淆,初次尝试未能通过测试。经过反思和修正,作者给出了正确解决方案,并提醒读者注意题目细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今日无聊,找个洛谷题做做,本人很菜,于是挑中了她————

题目描述

出题是一件痛苦的事情!

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

好吧,题目是这样的:给出一串数以及一个数字 CC,要求计算出所有 A - B = CA−B=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。

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

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

输出格式

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

输入输出样例

输入

4 11 1 2 3

输出

3

 

好家伙,这不就是leetcode经典题目两数之和的变形吗!!(然而并不是)

飞速写完代码

#include <unordered_map>#include <iostream>#include <vector>using namespace std;unordered_map<int,int> m;vector<int> a;int main(){long long int N,C;long long int x;scanf("%lld%lld",&N,&C);int count=0;for(int i=0;i<N;i++){scanf("%lld",&x);a.push_back(x);}for(int i=0;i<N;i++){m[a[i]]=i;}for(int i=0;i<N;i++){auto it=m.find(a[i]+C);if(it!=m.end()){    count++;}}printf("%d
",count);}

关于两数之和解析

然而怎么也过不了.....

仔细思索,题目其实并不一样(不同位置的数字一样的数对算不同的数对)。

故按以上做法必定会少一些数据

所以

#include <bits/stdc++.h>//万能头文件,不用调用头文件<map> using namespace std;int main(){long long n,c,co=0; //要开long long,否则会 WA 一个数据点 cin>>n>>c;int a[n+1];map<int,int> b;//键值和映照数据都是 int 类型 for(int i=1; i<=n; i++){  cin>>a[i];  b[a[i]]++;}for(int i=1; i<=n; i++)  co+=b[a[i]+c];//反向思维,枚举 B+Ccout<<co<<endl;return 0;}

完毕,又浪费了好长时间。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值