結果

問題 No.5001 排他的論理和でランニング
ユーザー letrangerjp
提出日時 2018-03-25 10:22:59
言語 C
(gcc 13.3.0)
結果
AC  
実行時間 61 ms / 1,500 ms
コード長 715 bytes
コンパイル時間 98 ms
実行使用メモリ 6,148 KB
スコア 25,755,979
最終ジャッジ日時 2020-03-12 20:52:57
ジャッジサーバーID
(参考情報)
judge6 /
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 50
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

static unsigned long y = 2463534242;
unsigned long xorshift(void) {
  y = y ^ (y << 13); y = y ^ (y >> 17);
  return y = y ^ (y << 5);
}

int main(void) {
  y = time(NULL);
  int N, M, A[100000];
  scanf("%d%d\n", &N, &M);

  int curr = 0;
  for (int i = 0; i < N; ++i) {
    scanf("%d", &A[i]);
    curr ^= A[i];
  }
  for (;;) {
    int from = xorshift()%M;
    int to = M + xorshift()%(N-M);
    curr ^= A[from] ^ A[to];
    A[from] ^= A[to];
    A[to] ^= A[from];
    A[from] ^= A[to];
    if (curr == (1<<20) - 1) {
      break;
    }
  }
  // printf("%d\n", curr);
  for (int i = 0; i < M; ++i) {
    printf("%d%c", A[i], i < M-1 ? ' ' : '\n');
  }
}
0