题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6676
思路
训练赛的时候,一直WA,没找到问题所在,就结束了,错误的地方在于,最后还剩多少个1用来异或,算的写法写错了,应该用(1的总数-最后的最大值) 来算,而我直接用变量来统计了!!
题解就直接引用官方的了:
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
int n;
while(cin >> n){
while(n--){
string s;
cin >> s;
s += "#";
int len = s.length();
int b, sum;
b = 0, sum = 0;
vector<int> ve;
ve.clear();
for(int i = 0; i < len; i++){
if(s[i] == '?') {
b++;
}
else if(s[i] == '^' || s[i] == '#') {
ve.push_back(b + 1);
b = 0;
}
}
for(auto i : ve) {
for(int j = 21; j >= 1; j--) {
if(sum & (1 << j) || i < (1 << j)) continue;
i -= (1 << j);
sum ^= (1 << j);
}
}
if((len - sum) % 2) sum ^= 1;
cout << sum << endl;
}
}
return 0;
}