阅读 97

Codeforces Round #731 (Div. 3) D. Co-growing Sequence(位运算/贪心)

include

using namespace std;
int n;
int x[200005], y[200005], xr[200005];
int main() {
int t;
cin >> t;
while(t--) {
cin >> n;
for(int i = 1; i <= n; i++) cin >> x[i];
for(int i = 1; i <= n; i++) {
int tmp = 0;
if(i == 1) {
y[1] = 0;
xr[1] = 0 ^ x[1];
continue;
}
int fuck = 0;
for(int j = 0; j < 32; j++) {//逐位分析
fuck |= (((xr[i - 1] >> j) & 1) << j);
if((xr[i - 1] >> j) & 1) {//由题目要求
if((x[i] >> j) & 1) {
tmp |= (0 << j);
} else {
tmp |= (1 << j);
}
} else {
if(fuck == xr[i - 1]) {//如果已经遍历完xr[i - 1]的有效位 那么y[i]剩下全取0即可,直接break
break;
} else {

				}
			}
		}
		y[i] = tmp;
		xr[i] = x[i] ^ y[i];//不要忘记更新
	}
	for(int i = 1; i <= n; i++) {
		cout << y[i] << " ";
	}
	cout << endl;
}
return 0;

}

原文:https://www.cnblogs.com/lipoicyclic/p/14998636.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐