Skip to content

Instantly share code, notes, and snippets.

@tanzaku
Created August 16, 2018 03:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tanzaku/084c643c8e0121abf25e51509cc25716 to your computer and use it in GitHub Desktop.
Save tanzaku/084c643c8e0121abf25e51509cc25716 to your computer and use it in GitHub Desktop.
SRM 736 Div1 Easy
public class DigitRotation {
public int sumRotations(String X) {
int[] digits = new int[X.length()];
for (int i = 0; i < digits.length; i++) digits[i] = X.charAt(i) - '0';
final long n = digits.length;
final int mod = 998244353;
long[] pow = new long[digits.length];
pow[digits.length - 1] = 1;
for (int i = digits.length - 2; i >= 0; i--) {
pow[i] = pow[i+1] * 10 % mod;
}
long ans = 0;
long sum = 0;
for (int i = 0; i < n; i++) {
sum += digits[i] * pow[i] % mod;
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = j + 1; k < n; k++) {
if (i == 0 && digits[k] == 0) continue;
ans += digits[k] * pow[i] % mod;
ans += digits[i] * pow[j] % mod;
ans += digits[j] * pow[k] % mod;
// dump(i, j, k);
ans += sum;
ans -= digits[i] * pow[i] % mod;
ans -= digits[j] * pow[j] % mod;
ans -= digits[k] * pow[k] % mod;
ans %= mod;
}
}
}
return (int)((ans % mod + mod) % mod);
}
static void dump(Object... o) { System.err.println(Arrays.deepToString(o)); }
static void swap(int[] xs, int i, int j) { int t = xs[i]; xs[i] = xs[j]; xs[j] = t; }
static void swap(long[] xs, int i, int j) { long t = xs[i]; xs[i] = xs[j]; xs[j] = t; }
static long gcd(long n, long r) { return r == 0 ? n : gcd(r, n % r); }
static long lcm(long n, long r) { return n / gcd(n, r) * r; }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment