原来想hash的,后来发现没有这么复杂。
我们不妨考虑一对数(x,x+1),那么它的结果可以由(x/2,x/2+1)的结果得到,这里的/与c++里的一样表示整除,后面也是如此。有两种情况:
1.x=2u,x+1=2u+1,则Ax=Ax/2,A(x+1)=Ax/2+A(x/2+1);
2.x=2u+1,x+1=2u+2,则Ax=Ax/2+A(x/2+1),Ax+1=A(x/2+1);
然后所有的数对最终会变为(1,2),且复杂度为O(logN)。结果即(n,n+1)的前一项。注意多组数据清零,以及n=0时特判(其实不特判也不是不可以)。
AC代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct hgnum{ int p[505]; }s,x,y; ch