问题标题: 酷町堂:1548 游戏之金币增长

0
0
已解决
许金夫
许金夫
初级天翼
初级天翼

1548   游戏之金币增长

题目描述 Description

小王是一个竞技游戏爱好者,在这一年中进行了N盘游戏,每盘游戏中获得的金币数是不同的,现在他想统计在这么多盘游戏中有多少次两盘游戏金币的差值等于C。例如进行5盘游戏,要求算有多少次两盘游戏差值等于20的情况(10 30 50 24 32),答案是2.

输入描述 Input Description

第一行包括2个非负整数N和C,中间用空格隔开。

第二行有N个整数,中间用空格隔开,作为要求处理的那串数。

输出描述 Output Description

输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。

样例输入 Sample Input

 

4 1
1 1 2 3

样例输出 Sample Output

 

3

数据范围及提示 Data Size & Hint

对于73%的数据,N <= 2000;

对于100%的数据,N <= 200000。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[200010],c,s;
bool cmp(int x,int y)
{
    return x>y;
}
int main()
{
    cin>>n>>c;
    for(int i=0;i<n;i++)
        cin>>a[i];
    sort(a,a+n,cmp);
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
        {
            if(a[i]-a[j]==c)
                s++;
        }
    cout<<s;
    return 0;
}

我都用了sort了居然还超时3个点


1
已采纳
黄子扬
黄子扬
初级天翼
初级天翼

1.数据范围N<200000 sort O(N log N) 一遍下来就会直接超时了

2.不需要排序,题目说了用桶,即用桶纪录两数之差的绝对值

3.最后输出桶中下标为20的变量的值

4.如果还不行就手动吸氧O2,O3(划掉

黄子扬在2020-05-02 07:33:59追加了内容

哦看错题了,不是输出下标为20的,而是下标为c的,抱歉

0
0
0
0
我要回答