Acdream Xor 簡單數學

2021-09-08 16:32:09 字數 1396 閱讀 1677

給定乙個集合a,乙個集合b,a,b元素個數相等,然後問是否存在乙個數x使得a中的元素均與這個數進行按位異或操作後的結果為b集合,如果存在輸出最小的數,不存在輸出-1。

思路:由於給定的n為奇數,所以能夠根據二進位制位的最右邊位確定唯一的分組,然後只需要判定這個分組是否合理即可。

分組是這樣劃分的,如有a、b兩組資料,把a組根據末位0和1分成兩組,b組同理劃分,那麼只有00配對或者是01配對,這有各組中數的個數確定。配對模式確定後,再通過30次判定即可。

#include #include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 100005

;int

a[maxn], b[maxn], n;

int ans[40

];int st[4

][maxn];

int cnt[4], bit[4][40

];//

n是奇數就好做了

int cal(int x, int

b) }

int judge(int i, int

mode)

else

}void

gao()

memset(ans,

0, sizeof

(ans));

memset(cnt,

0, sizeof

(cnt));

for (int i = 0; i < n; ++i)

for (int i = 0; i < 4; ++i)

}int mode = -1

;

//由最低位的1的個數劃分模式,由於n為奇數,所以劃分的方式是唯一的

if (cnt[0] == cnt[2]) ans[0] = mode = 0

;

else

if (cnt[0] == cnt[3]) ans[0] = mode = 1

;

if (mode == -1

)

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

}int ret = 0

;

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

printf(

"%d\n

", ret);

}int

main()

for (int i = 0; i < n; ++i)

gao();

}return

0;

}

簡單數學函式

簡單數學函式 1 題目描述 已知函式f x x2 2 2x根據輸入的x值計算f x 運算結果不超過int範圍,x 0 輸入輸入多組測試資料,每組一行為x值 輸出每個測試輸出資料一行 x int input 輸入x if x 0 y x 2 2 2 x print y 題目描述 已知函式,輸入a b的...

C Math 簡單數學計算

object math 為三角函式 對數函式和其他通用數學函式提供常數和靜態方法。序號常量含義值 1math.pi 3.14159265358997 2math.e e2.71828182845905 序號函式 含義示例 1math.pow a,b a的b次方 math.pow 2,3 結果為8 2...

HDU 5399 簡單數學

本題目的意思是給出m個 f1 f2,fm 置換,一些置換丟失,讓求有多少種組合,可以使得 f1 f2 fm i i 1 i n 對多有的i都成立 這樣問題可以轉換為若任意確定一些丟失的置換,而保留乙個丟失的置換fi,有 x fi y i fi x的逆 y的逆 所以,有唯一解,所以個數為記 1的個數為...