Problem p02631 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef double db;
typedef long long ll; // 溢出会变成负值
typedef long double ldb;
typedef unsigned long long ull; // 自动取模2^64
const double pi = acos(-1.0);
const int mod = 1e9 + 7;    // 998244353;
const int inf = 0x7fffffff; // 2^31-1
const ll INF = 0x7fffffffffffffff;
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
// ll begin_time=clock();    ll end_time=clock();  cout<<"time =
// "<<end_time-begin_time<<" ms!"<<endl; bool operator < (const mmp &a)
// const{return x<a.x||x==a.x&&y<a.y;}       //map<int,map<int,int> >z;
// map<int,int>::iterator it;for(it=z.begin();it!=z.end();it++)printf("%d
// %d\n",it->first,it->second); ll poww(ll a,ll b){ll
// s=1;while(b){if(b&1)s=(s*a)%mod;a=(a*a)%mod;b>>=1;}return s%mod;}
// //快速幂取模 lower_bound(begin,end,num); 第一个>=num的数字
// upper_bound(begin,end,num); 第一个>num的数字 返回地址
// freopen("input.in","r",stdin);     freopen("output.out","w",stdout);
// //文件读写提交 reverse(s.begin(),s.end());   //反转字符串        floor();
// 向下取整  ceil(); 向上取证
// 数轴上n个点移动到同一位置，移动到该组数字的中位数的总距离最短
bool isPrime(int n) {
  if (n == 2 || n == 3)
    return 1;
  if (n % 6 != 1 && n % 6 != 5)
    return 0;
  int t = sqrt(n);
  for (int i = 5; i <= t; i += 6)
    if (n % i == 0 || n % (i + 2) == 0)
      return 0;
  return 1;
} // 判断素数

int x[100005];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll a, b, c, d, e, f, g, T;
  //	cin>>T;
  // while(T--)
  {
    cin >> a;
    b = 0;
    for (int i = 0; i < a; i++) {
      cin >> x[i];
      b ^= x[i];
    }
    for (int i = 0; i < a - 1; i++) {
      cout << ll(b ^ x[i]);
      cout << " ";
    }
    cout << ll(b ^ x[a - 1]) << endl;
  }
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef double db;
typedef long long ll; // 溢出会变成负值
typedef long double ldb;
typedef unsigned long long ull; // 自动取模2^64
const double pi = acos(-1.0);
const int mod = 1e9 + 7;    // 998244353;
const int inf = 0x7fffffff; // 2^31-1
const ll INF = 0x7fffffffffffffff;
const int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
// ll begin_time=clock();    ll end_time=clock();  cout<<"time =
// "<<end_time-begin_time<<" ms!"<<endl; bool operator < (const mmp &a)
// const{return x<a.x||x==a.x&&y<a.y;}       //map<int,map<int,int> >z;
// map<int,int>::iterator it;for(it=z.begin();it!=z.end();it++)printf("%d
// %d\n",it->first,it->second); ll poww(ll a,ll b){ll
// s=1;while(b){if(b&1)s=(s*a)%mod;a=(a*a)%mod;b>>=1;}return s%mod;}
// //快速幂取模 lower_bound(begin,end,num); 第一个>=num的数字
// upper_bound(begin,end,num); 第一个>num的数字 返回地址
// freopen("input.in","r",stdin);     freopen("output.out","w",stdout);
// //文件读写提交 reverse(s.begin(),s.end());   //反转字符串        floor();
// 向下取整  ceil(); 向上取证
// 数轴上n个点移动到同一位置，移动到该组数字的中位数的总距离最短
bool isPrime(int n) {
  if (n == 2 || n == 3)
    return 1;
  if (n % 6 != 1 && n % 6 != 5)
    return 0;
  int t = sqrt(n);
  for (int i = 5; i <= t; i += 6)
    if (n % i == 0 || n % (i + 2) == 0)
      return 0;
  return 1;
} // 判断素数

int x[200005];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll a, b, c, d, e, f, g, T;
  //	cin>>T;
  // while(T--)
  {
    cin >> a;
    b = 0;
    for (int i = 0; i < a; i++) {
      cin >> x[i];
      b ^= x[i];
    }
    for (int i = 0; i < a - 1; i++) {
      cout << ll(b ^ x[i]);
      cout << " ";
    }
    cout << ll(b ^ x[a - 1]) << endl;
  }
}