对二进制位 a,b ,进行或运算和异或运算的结果如下表所示:
a,b | 或 | 异或 |
---|---|---|
0,0 | 0 | 0 |
0,1 | 1 | 1 |
1,0 | 1 | 1 |
1,1 | 1 | 0 |
对每个二进制位都是 0,1 随机来说。如果是或运算(代码 A
),那么每个位应当有 75\% 概率为 1 ,否则应当有 50\% 概率是 1 。因为有 10^4 个随机数,所以随机结果符合统计分布规律(即频率趋于概率)。那么任取一位,判断其 1 出现的概率即可。比如可以取最末尾。
本题有非常多的解法。欢迎在评论区分享你的解法。
参考代码:
#include <bits/stdc++.h>
using namespace std;
#define sc(x) scanf("%lld", &x)
typedef long long ll;
ll p;
signed main()
{
for (ll i = 0, x; i < 10000; ++i)
{
sc(x);
p += x & 1;
}
printf("%c", abs(p - 7500) < abs(p - 5000) ? 'A' : 'B');
return 0;
}