求教,两份代码思路是一样的,一个直接计数另一份用数组存数,结果一个wa一个ac?明明都是一样的呀
题目链接:cf
#pragma GCC optimize("O3")
#pragma GCC optimize(2)
#pragma GCC optimize("Ofast")
#include<iostream>
#include<cstring>
#define For(i,j,k) for(register int i=(j);i<(k);i++)
#define MEM(a,b) memset(a,b,sizeof(a))
#define endl "\n"
using namespace std;
typedef long long ll;
const int maxn=50;
int a[maxn];
int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,t,x;
cin >> t;
while (t--) {
cin >> n;
ll cnt = 0;
For(i, 0, n) {
cin >> x;
//if (x % 2 != i % 2)cnt++;//等价于(x^i)&1获取最高位数,1则奇偶性不同,否则相同,但是这段我用%2的wa,用&1的还是wa,服了
if ((x ^ i) & 1)cnt++;
}
if (cnt & 1)cout << "-1" << endl;//思路:获取奇偶性不同的数的个数,奇数个则输出-1,否则输出总个数的1/2
else cout << cnt / 2 << endl;
}
return 0;
}
//上面那份过不了,但是这份可以,难道一定得用数组?还是到底哪里出了问题? 46ms
/*int main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n,t,x;
cin >> t;
while (t--) {
cin >> n;
MEM(a, 0);
For(i, 0, n) {
cin >> x;
if ((x^i)&1)a[i&1]++;
}
if (a[0]==a[1])cout << a[0] << endl;
else cout << "-1" << endl;
}
return 0;
}
*/
if ((x ^ i) & 1)cnt++;
if ((x^i)&1)a[i&1]++;
这两行并不等价