給定乙個集合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的個數為...