XJOI 3393 序列 题解

这是一篇关于XJOI 3393题目的题解,主要讨论如何求解序列f(x)的递归问题。文章提供了利用递归求解f(x)的方法,由于时间复杂度低但空间限制,不适合使用记忆化。通过观察f(x)的值,可以使用桶来存储并利用等差数列求和公式计算相等对的数量。样例输入和输出展示了算法的应用,并给出了问题规模和输入输出格式。
摘要由CSDN通过智能技术生成

时间:1s 空间:128M

题目描述:

f(0)=0
f(2∗x)=f(x)
f(2∗x+1)=f(x)+1
你有一个序列a1,a2,a3…an
现在你想知道有多少对的f(ai)=f(aj)(1<=i< j<=n)

输入格式:

第一行输入一个整数n
第二行输入n个整数ai

输出格式:

输出一个整数

样例输入1:

3
1 2 4

样例输出1:

3

样例输入2:

3
5 3 1

样例输出2:

1

约定:

1<=n<=10^5,1<=ai<=10^9

提示:

首先,如何求f(x),可以用递归解决。时间复杂度较小,而且如果用记忆化,空间会开不下。求f(x)的代码如下:

int mrz_key ( int k )
{
    if ( k == 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值