时间: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 == 0 ) return 0;
if ( k % 2

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

被折叠的 条评论
为什么被折叠?



