题解 | #冰冰的异或#
冰冰的正多边形
https://ac.nowcoder.com/acm/contest/93218/A
实际上,这道题目很假,打表就可以
for (int i = 1; i <= 11; i++) {
for (int j = 1; j <= 11; j++) printf("%d ", i ^ j);
puts("");
}
打表之后发现两个规律
第一,形如10000...0
这样的,不管怎么样都构造不出10000....0
因为要构造出1000...0
当且仅当要和 异或起来,这做不到
第二,形如100..1(中间有额外的1)...0
这样的,可以构造出从[1...(11111...1)]
区间里面的任意数,因为最高位的那个1
可以下放,而有多余的那个额外的1
,保证了低位异或的每一位,都可以填0 或 1
综上所数,形如1000..0
,答案是(1 << high)
,high
表示最高位的那个1
的位数
否则,答案是(1<< (high+1))
对于,特判