Java 实现 XOR 计数问题:动态规划解法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
long[] A = new long[n+1];
for (int i = 1; i <= n; i++) {
A[i] = scanner.nextLong();
}
long[][] dp = new long[4][n+1];
long[][] preV = new long[30][2];
int mod = 998244353;
for (int idx = 0; idx <= n; idx++) {
dp[0][idx] = 1;
}
long[] two_pow = new long[30];
for (int i = 0; i < 30; i++) {
two_pow[i] = (long) Math.pow(2, i) % mod;
}
for (int k = 1; k <= 3; k++) {
int pre = 0;
for (int[] row : preV) {
for (int i = 0; i < 2; i++) {
row[i] += dp[k - 1][0];
}
}
for (int idx = 1; idx <= n; idx++) {
pre ^= A[idx];
long cur = 0;
for (int c = 0; c < 30; c++) {
cur += preV[c][(pre >> c & 1) ^ 1] * two_pow[c];
cur %= mod;
}
dp[k][idx] = dp[k][idx - 1] + cur;
dp[k][idx] %= mod;
for (int c = 0; c < 30; c++) {
preV[c][pre >> c & 1] += dp[k - 1][idx];
preV[c][pre >> c & 1] %= mod;
}
}
}
System.out.println(dp[3][n]);
}
}
原文地址: https://www.cveoy.top/t/topic/qouQ 著作权归作者所有。请勿转载和采集!