高级光能
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。
初级光能
这题本身不难,但数据量较大,易超时: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即可!
望采纳!!
初级启示者
我有一个似乎可以过的思路:
先对数组进行排序,然后从i到i+1枚举差值,如果取到 |j-i| = 20 ,则确定j~n 的元素都符合条件,此时cnt++,反复n-1轮
复杂度O(n^2 log n^2),应该可以优化
初级光能
小桶
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]
资深光能
额,这道题,我虽然没写(同时也谢谢你让我可以刷一道题),但是思路还是有的,你学过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比我早
资深光能
额,这道题,我虽然没写(同时也谢谢你让我可以刷一道题),但是思路还是有的,你学过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比我早