问题标题: 酷町堂:1610为什么Runtime Error?

0
0
已解决
徐子玄
徐子玄
初级光能
初级光能

1610   problem(M-N=P)经验值:800

题目描述 Description

给你A 个从小到大排好序的整数,一个数P,要求在这A个整数中找两个数M和N,使得M-N=P,问你能找到多少种这样的方案?

输入描述 Input Description

第一行:2 个正整数:A,P。
第二行:N个顺序整数。

输出描述 Output Description

一个整数,表示该串数中包含的所有满足M-N=P 的数对的方案数。

样例输入 Sample Input

4 1 1 1 2 2

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

对于50% 的数据:A 的范围是[1…1,000]。

对于另外50% 的数据:A 的范围是[1…100,000]。

对于100% 的数据:P的范围是[1…1,000,000,000],A 个整数中每个数的范围是:[0…1,000,000,000]。

我的代码:

#include <iostream>
using namespace std;
int a[10000001],b[20000001];
int main()
{
    int n,c,num=0;
    cin>>n>>c;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    for(int i=1;i<=n;i++)
        b[a[i]+c]++;
    for(int i=1;i<=n;i++)
        num+=b[a[i]];
    cout<<num;
    return 0;
}

 


0
已采纳
邹昊轩
邹昊轩
资深光能
资深光能

循环(int i=1; i<=n; i++)
    如果(b[a[i]-m])
    {
        s+=b[a[i]]*b[a[i]-m];
        b[a[i]]=0;
    }
    输出<<s;

以上为核心代码,还有输入a[i],b[a[i]]++。其他定义什么的,你都会吧,不会@我。

输入n>>m;//在桶计数前

1
黄子扬
黄子扬
初级天翼
初级天翼

回楼上,不需要long long

0
杜智宸
杜智宸
中级光能
中级光能

这题应该要用字符串,不然数字太大

0
刘英杰
刘英杰
新手天翼
新手天翼

我只给你一个答案:

你的数组定义的太太太小了

定义要跟范围一样大的原数组和桶数组才行

不求采纳求您的AC

刘英杰在2020-08-07 18:27:34追加了内容

还有,您的数字也要定义成long long的数据类型

我要回答