提出 #7589145


ソースコード 拡げる

#include <bits/stdc++.h>

#define rep(i, n) for (ll i = 0; i < (n); i++)
#define rep2(i, a, b) for (ll i = (a); i < (b); i++)
typedef uint64_t ull;
typedef int64_t ll;
typedef std::pair<ll, ll> PLL;

using namespace std;

signed main() {
  ll N;
  cin >> N;
  vector<ull> a(N);

  ull Z = 0;
  rep(i,N){
    cin >> a[i];
    Z ^= a[i];
  }
  rep(i,N){
    a[i] &= ~Z;
  }

  //printf("Z = 0x%x\n", Z);

  // ここで、青色のxorをX、赤色のxorをY、その他をZとする。
  // Zはどのような分割をしても、かならず答えに現れるもの。
  // X+Y+Z = a[0] ^ a[1] ^ ... ^ a[n-1]
  // X ^ Y = 0 --> X = Y
  // なのでa[i]から幾つか選んで、そのxorの合計Xを最大化したい。
  // これを吐き出し法でやっていく。

  ll pivot = 0;
  for (ull bit=(((ull)1) << 63); bit > 0; bit = bit>>1) {
    //printf("bit=0x%lx\n", bit);
    ll t = -1;

    // pivot行を探す
    for (ll i=pivot; i<N; i++) {
      if ((a[i] & bit) != 0) {
        t = i;
        break;
      }
    }

    if (t == -1)
      continue; // そのbitはスキップ

    swap(a[pivot], a[t]);
    rep(i,N) {
      if (i == pivot)
        continue;
      if ((a[i] & bit) != 0) {
        a[i] ^= a[pivot];
      }
    }

    pivot++;
  }

  //rep(i,N){
  //  printf("a[%d]=0x%lx\n", i, a[i]);
  //}

  ull X = 0;
  rep(i,N) {
    X ^= a[i];
  }
  cout << 2*X + Z << endl;
  return 0;
}

提出情報

提出日時
問題 F - Xor Sum 3
ユーザ bobuhiro11
言語 C++14 (GCC 5.4.1)
得点 600
コード長 1485 Byte
結果 AC
実行時間 92 ms
メモリ 1024 KiB

ジャッジ結果

セット名 Sample Subtask1
得点 / 配点 0 / 0 600 / 600
結果
AC × 3
AC × 53
セット名 テストケース
Sample sample_01.txt, sample_02.txt, sample_03.txt
Subtask1 sample_01.txt, sample_02.txt, sample_03.txt, sub1_01.txt, sub1_02.txt, sub1_03.txt, sub1_04.txt, sub1_05.txt, sub1_06.txt, sub1_07.txt, sub1_08.txt, sub1_09.txt, sub1_10.txt, sub1_11.txt, sub1_12.txt, sub1_13.txt, sub1_14.txt, sub1_15.txt, sub1_16.txt, sub1_17.txt, sub1_18.txt, sub1_19.txt, sub1_20.txt, sub1_21.txt, sub1_22.txt, sub1_23.txt, sub1_24.txt, sub1_25.txt, sub1_26.txt, sub1_27.txt, sub1_28.txt, sub1_29.txt, sub1_30.txt, sub1_small_01.txt, sub1_small_02.txt, sub1_small_03.txt, sub1_small_04.txt, sub1_small_05.txt, sub1_small_06.txt, sub1_small_07.txt, sub1_small_08.txt, sub1_small_09.txt, sub1_small_10.txt, sub1_small_11.txt, sub1_small_12.txt, sub1_small_13.txt, sub1_small_14.txt, sub1_small_15.txt, sub1_small_16.txt, sub1_small_17.txt, sub1_small_18.txt, sub1_small_19.txt, sub1_small_20.txt
ケース名 結果 実行時間 メモリ
sample_01.txt AC 2 ms 384 KiB
sample_02.txt AC 1 ms 256 KiB
sample_03.txt AC 1 ms 256 KiB
sub1_01.txt AC 28 ms 512 KiB
sub1_02.txt AC 33 ms 640 KiB
sub1_03.txt AC 13 ms 384 KiB
sub1_04.txt AC 52 ms 896 KiB
sub1_05.txt AC 75 ms 1024 KiB
sub1_06.txt AC 77 ms 1024 KiB
sub1_07.txt AC 75 ms 1024 KiB
sub1_08.txt AC 75 ms 1024 KiB
sub1_09.txt AC 75 ms 1024 KiB
sub1_10.txt AC 75 ms 1024 KiB
sub1_11.txt AC 73 ms 1024 KiB
sub1_12.txt AC 77 ms 1024 KiB
sub1_13.txt AC 22 ms 512 KiB
sub1_14.txt AC 67 ms 1024 KiB
sub1_15.txt AC 83 ms 1024 KiB
sub1_16.txt AC 84 ms 1024 KiB
sub1_17.txt AC 84 ms 1024 KiB
sub1_18.txt AC 85 ms 1024 KiB
sub1_19.txt AC 84 ms 1024 KiB
sub1_20.txt AC 86 ms 1024 KiB
sub1_21.txt AC 80 ms 1024 KiB
sub1_22.txt AC 79 ms 1024 KiB
sub1_23.txt AC 81 ms 1024 KiB
sub1_24.txt AC 79 ms 1024 KiB
sub1_25.txt AC 82 ms 1024 KiB
sub1_26.txt AC 92 ms 1024 KiB
sub1_27.txt AC 92 ms 1024 KiB
sub1_28.txt AC 7 ms 512 KiB
sub1_29.txt AC 1 ms 256 KiB
sub1_30.txt AC 21 ms 1024 KiB
sub1_small_01.txt AC 1 ms 256 KiB
sub1_small_02.txt AC 1 ms 256 KiB
sub1_small_03.txt AC 1 ms 256 KiB
sub1_small_04.txt AC 1 ms 256 KiB
sub1_small_05.txt AC 1 ms 256 KiB
sub1_small_06.txt AC 1 ms 256 KiB
sub1_small_07.txt AC 1 ms 256 KiB
sub1_small_08.txt AC 1 ms 256 KiB
sub1_small_09.txt AC 1 ms 256 KiB
sub1_small_10.txt AC 1 ms 256 KiB
sub1_small_11.txt AC 1 ms 256 KiB
sub1_small_12.txt AC 1 ms 256 KiB
sub1_small_13.txt AC 1 ms 256 KiB
sub1_small_14.txt AC 1 ms 256 KiB
sub1_small_15.txt AC 1 ms 256 KiB
sub1_small_16.txt AC 1 ms 256 KiB
sub1_small_17.txt AC 1 ms 256 KiB
sub1_small_18.txt AC 1 ms 256 KiB
sub1_small_19.txt AC 1 ms 256 KiB
sub1_small_20.txt AC 1 ms 256 KiB