結果
問題 | No.2061 XOR Sort |
ユーザー |
![]() |
提出日時 | 2022-08-26 22:11:36 |
言語 | Java (openjdk 23) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,381 bytes |
コンパイル時間 | 2,287 ms |
コンパイル使用メモリ | 78,412 KB |
実行使用メモリ | 62,068 KB |
最終ジャッジ日時 | 2024-10-13 22:49:12 |
合計ジャッジ時間 | 10,349 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 WA * 14 |
ソースコード
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine()); String[] sa = br.readLine().split(" "); long[] a = new long[n]; for (int i = 0; i < n; i++) { a[i] = Integer.parseInt(sa[i]); } br.close(); int mod = 998244353; Hakidasi h = new Hakidasi(a); long ans = power(2, h.rank, mod); System.out.println(ans); } static long power(long x, long n, int m) { if (n == 0) { return 1; } long val = power(x, n / 2, m); val = val * val % m; if (n % 2 == 1) { x %= m; val = val * x % m; } return val; } static class Hakidasi { long[] arr; int[] msb; int n, rank; public Hakidasi(long[] a) { n = a.length; arr = Arrays.copyOf(a, n); msb = new int[n]; for (int i = 62; i >= 0; i--) { boolean flg = false; for (int j = rank; j < n; j++) { if ((arr[j] >> i & 1) == 1) { long t = arr[rank]; arr[rank] = arr[j]; arr[j] = t; flg = true; break; } } if (flg) { msb[rank] = i; for (int j = 0; j < n; j++) { if (j != rank && (arr[j] >> i & 1) == 1) { arr[j] ^= arr[rank]; } } rank++; } } } } }