brz的杯子
题目
题解
y|x 是能够整除的意思
推断序列
位置:1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17
数字:1,2,2,3,2,3,2,4,3, 3, 2, 4, 2, 3, 3, 5, 2
发现每到下标为2的幂的位置,所需要的最大数都会加1,这个数字等价于下标二进制的位数。
所以对于n个瓶子,只有当m>=n的二进制位数时才会存在可行的方案。
代码
#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
using namespace std;
int Find(int x) { //二进制位
int k = 0;
while(x) {
k++;
x >>= 1;
}
return k;
}
int main() {
int _, n, m;
int ans = 0;
scanf("%d", &_);
for(int i = 1; i <= _; i++) {
scanf("%d %d", &n, &m);
if(m >= Find(n))
ans ^= i;
else
ans ^= i - 1;
}
printf("%d\n", ans);
return 0;
}