JZOJ5258 友好數對

2021-08-06 01:58:09 字數 1333 閱讀 2307

題目就是要我們求有多少個(a

i,bi

) 滿足ai

xor bi

=2x+

2y(x

!=y)

所以我們可以知道: ai

xor bi

xor 2x

xor 2y

=0我們就將所以ai

xor 2x

放入乙個雜湊表裡面,

然後列舉bi

xor 2y

,在雜湊表裡面找,有多少個與它相同,統計答案。

但是這樣會算重,比如:如果存在某個ai

=bj 那麼就會算重位數次, 還有a

i xor 2x

,bi xor 2y

與 ai

xor 2y

,bi xor 2x

是一樣的。

那我們就強制要求

x<

y ,這樣計算就不會算重了。

我們先列舉位置i,從0到30,將所以aj

xor 2i

−1放入雜湊表裡面,

再用所以的bj

xor 2i

來判斷,這樣就不會算重了。

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define n 100003

#define db double

#define p putchar

#define g getchar

#define mo 23332333

using namespace std;

char ch;

void read(int &n)

void write(int

x)int f[mo],g[mo];

int a[n],b[n],z[33],root[2],tot;

int n,m,x,y;

ll ans;

inline void ins()

inline int find()

int main()

for(int i=1;i<30;i++)

for(int j=1;j<=n;j++)

}//write(ans/2),p('\n');

printf("%lld\n",ans);

}

1105 判斷友好數對(函式專題)

輸入兩個正整數m和n,順序輸出m到n之間的所有友好數對。如果兩個整數的所有正因子之和 包括1,不包括自身 等於對方,就稱這對數是友好的。例如 1184和1210是友好數對,因為 1184的因子之和為1 2 4 8 16 32 37 74 148 296 592 1210 1210的因子之和為1 2 ...

1105 判斷友好數對(函式專題)

輸入兩個正整數m和n,順序輸出m到n之間的所有友好數對。如果兩個整數的所有正因子之和 包括1,不包括自身 等於對方,就稱這對數是友好的。例如 1184和1210是友好數對,因為 1184的因子之和為1 2 4 8 16 32 37 74 148 296 592 1210 1210的因子之和為1 2 ...

NOIP2012模擬10 20 友好數對

description 如果乙個數a 能由乙個數b 旋轉得到,那麼我們稱為友好數對,如12345 和45123 為友好數對,12345 和54321 不為友好數對。給出兩個正整數l,r,求有多少友好數對,滿足 l ainput 第一行乙個整數t,表示資料組數,每組資料兩個正整數l,r。output ...