結果
| 問題 |
No.5001 排他的論理和でランニング
|
| ユーザー |
|
| 提出日時 | 2018-03-24 18:09:01 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 274 ms / 1,500 ms |
| コード長 | 979 bytes |
| コンパイル時間 | 106 ms |
| 実行使用メモリ | 6,148 KB |
| スコア | 52,428,750 |
| 最終ジャッジ日時 | 2020-03-12 20:22:22 |
|
ジャッジサーバーID (参考情報) |
judge9 / |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
#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], used[100000] = {0};
scanf("%d%d\n", &N, &M);
for (int i = 0; i < N; ++i) {
scanf("%d", &A[i]);
}
int curr = 0;
for (int i = 0; i < M; ++i) {
curr ^= A[i];
used[i] = 1;
}
for (int i = 0; i < 10000000; ++i) {
int from, to;
do { from = xorshift()%N; } while(!used[from]);
used[from] = 0;
do { to = xorshift()%N; } while(used[to]);
used[to] = 1;
curr ^= A[from] ^ A[to];
if (curr == (1<<20) - 1) {
break;
}
}
// printf("%d\n", curr);
int cnt = 0;
for (int i = 0; i < N; ++i) {
if (used[i] != 0) {
printf("%d", A[i]);
++cnt;
if (cnt < M) {
putchar(' ');
} else {
putchar('\n');
break;
}
}
}
}