#include <stdio.h> #include <stdint.h> #include <string.h> long long li[300000][3]; long long lj[300000][3]; int main(void) { long long i, j, n, r, m, p; for (n = 0; (r = getchar()) != '\n'; n++) li[n][r - 'a']++; for (i = 0; i < n - 1; i++) { lj[i][0] = li[i][0] + li[i + 1][0]; lj[i][1] = li[i][1] + li[i + 1][1]; lj[i][2] = li[i][2] + li[i + 1][2]; } for (r = n + i, i = 2; i < n; i++) { m = n - i; for (j = 0; j < m; j++) { long long a = (lj[j][0] += li[j + i][0]); long long b = (lj[j][1] += li[j + i][1]); long long c = (lj[j][2] += li[j + i][2]); //fprintf(stderr, "i=%d,j=%d:\t%d,%d,%d\n", i, j, a, b, c); r += ((!a || !b || a == b) && (!a || !c || a == c) && (!b || !c || b == c)); } } printf("%d\n", r); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #include <stdio.h> #include <stdint.h> #include <string.h> long long li[300000][3]; long long lj[300000][3]; int main(void) { long long i, j, n, r, m, p; for (n = 0; (r = getchar()) != '\n'; n++) li[n][r - 'a']++; for (i = 0; i < n - 1; i++) { lj[i][0] = li[i][0] + li[i + 1][0]; lj[i][1] = li[i][1] + li[i + 1][1]; lj[i][2] = li[i][2] + li[i + 1][2]; } for (r = n + i, i = 2; i < n; i++) { m = n - i; for (j = 0; j < m; j++) { long long a = (lj[j][0] += li[j + i][0]); long long b = (lj[j][1] += li[j + i][1]); long long c = (lj[j][2] += li[j + i][2]); //fprintf(stderr, "i=%d,j=%d:\t%d,%d,%d\n", i, j, a, b, c); r += ((!a || !b || a == b) && (!a || !c || a == c) && (!b || !c || b == c)); } } printf("%d\n", r); return 0; } |