import java.util.*;\npublic class Main {\n static long mod = 98826190947L;\n static int n;\n static final int N = 100010;\n static long[] a = new long[N];\n static long ans = 0;\n static int[][] ch = new int[N * 60][10];\n static int[] num = new int[N * 60];\n static int tot = 1;\n\n public static void Insert(long val) {\n int now = 1;\n for (int i = 0; i <= 61; ++i) {\n int str = (int) (val >> i & 1);\n if (ch[now][str] == 0)\n ch[now][str] = ++tot;\n now = ch[now][str];\n num[now]++;\n }\n }\n\n public static long lowbit(long val) {\n long now = 1, Ans = 0;\n for (int i = 0; i <= 61; i++) {\n int str = (int) (val >> i & 1);\n if (ch[(int)now][str ^ 1] != 0) {\n Ans = (Ans + (num[ch[(int)now][str ^ 1]] % mod * ((1L << i) % mod)) % mod) % mod;\n }\n now = ch[(int)now][str];\n }\n return Ans;\n }\n\n public static void main(String[] args) {\n Scanner sc = new Scanner(System.in);\n n = sc.nextInt();\n for (int i = 1; i <= n; i++) {\n a[i] = sc.nextLong();\n Insert(a[i]);\n }\n for (int i = 1; i <= n; i++)\n ans = (ans + lowbit(a[i])) % mod;\n System.out.println(ans);\n }\n

Java 实现 C++ 代码:使用 Trie 树计算二进制异或和

原文地址: https://www.cveoy.top/t/topic/qmBO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录