问题标题: 酷町堂:不要脸的我又来问问题了

0
0
已解决
龙舟
龙舟
高级光能
高级光能

1548   游戏之金币增长经验值:1200

题目描述 Description

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

输入描述 Input Description

第一行输入两个正整数n和c。

接下来一行输入n个正整数,表示每盘游戏的金币值。

输出描述 Output Description

输出一行,表示两盘游戏金币的差值为c的共有多少对。

样例输入 Sample Input

5 1 1 1 2 2 3

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

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

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

输入的数据,每个数不超过200000。


0
已采纳
徐子玄
徐子玄
初级光能
初级光能

这题本身不难,但数据量较大,易超时:70分的一定很多!

主要运用比较复杂的桶来解决

核心

 for(int i=1;i<=n;i++)
    b[a[i]+c]++;
 for(int i=1;i<=n;i++)
    num+=b[a[i]];

这样直接使用比较快

ps:输入自己想,输出num即可!

望采纳!!

0
赵逸凡
赵逸凡
初级启示者
初级启示者

我有一个似乎可以过的思路:

先对数组进行排序,然后从i到i+1枚举差值,如果取到 |j-i| = 20 ,则确定j~n 的元素都符合条件,此时cnt++,反复n-1轮

复杂度O(n^2 log n^2),应该可以优化

0
王泽宇
王泽宇
初级光能
初级光能

小桶

for(int i=0;i<n;i++){
        cin>>a[i];
        t[a[i]]++;
    }
    for(int i=0;i<n;i++)
        if(t[a[i]-c])  cnt+=t[a[i]-c]

 

0
邹昊轩
邹昊轩
资深光能
资深光能

额,这道题,我虽然没写(同时也谢谢你让我可以刷一道题),但是思路还是有的,你学过power这道题么?这道类似,但不完全一样,一个是加,一个是减,power里面的加 为了避免两种情况,第一种是避免1+2=3,而2+1同样等于3(如果没避免的话就产生了两个胖子,这就多余了一个),第二种是避免3+2=5,而1+4同样等于5,所以b【tmp】一定要在最后等于0,tmp也要<=1000看他有没有越界。而这道题减肯定是要定义tmp=a【i】-a【j】的,当然还要考虑a[j]-a[i],然后tmp必须>=0,因为c是非负整数。

然后我就要去试验了,毕竟实验出真知,代码去编译,调试,尝试才是他的乐趣

祝你ac比我早

0
邹昊轩
邹昊轩
资深光能
资深光能

额,这道题,我虽然没写(同时也谢谢你让我可以刷一道题),但是思路还是有的,你学过power这道题么?这道类似,但不完全一样,一个是加,一个是减,power里面的加 为了避免两种情况,第一种是避免1+2=3,而2+1同样等于3(如果没避免的话就产生了两个胖子,这就多余了一个),第二种是避免3+2=5,而1+4同样等于5,所以b【tmp】一定要在最后等于0,tmp也要<=1000看他有没有越界。而这道题减肯定是要定义tmp=a【i】-a【j】的,当然还要考虑a[j]-a[i],然后tmp必须>=0,因为c是非负整数。

然后我就要去试验了,毕竟实验出真知,代码去编译,调试,尝试才是他的乐趣

祝你ac比我早

0
我要回答