#include <cstdio>
#include <unordered_map>
using namespace std;
const int MAGIC_CONSTANT = 323232;
char magicBuf[MAGIC_CONSTANT];
long long magicArray[7][128];
int main() {
// ABC
magicArray[0]['a'] = 1;
magicArray[0]['b'] = 0 - MAGIC_CONSTANT - 1;
magicArray[0]['c'] = MAGIC_CONSTANT;
// AB
magicArray[1]['a'] = 1;
magicArray[1]['b'] = 0 - 1;
magicArray[1]['c'] = MAGIC_CONSTANT;
// BC
magicArray[2]['a'] = MAGIC_CONSTANT;
magicArray[2]['b'] = 1;
magicArray[2]['c'] = 0 - 1;
// CA
magicArray[3]['a'] = 1;
magicArray[3]['b'] = MAGIC_CONSTANT;
magicArray[3]['c'] = 0 - 1;
// A
magicArray[4]['a'] = 0;
magicArray[4]['b'] = 1;
magicArray[4]['c'] = 1;
// B
magicArray[5]['a'] = 1;
magicArray[5]['b'] = 0;
magicArray[5]['c'] = 1;
// C
magicArray[6]['a'] = 1;
magicArray[6]['b'] = 1;
magicArray[6]['c'] = 0;
char *magicWord = magicBuf;
scanf("%s", magicWord);
long long magicValue[7];
unordered_map<long long, int> magicMap[7];
for (int i = 0; i < 7; ++i) {
magicValue[i] = 0;
++magicMap[i][magicValue[i]];
}
long long fullyRealResult = 0;
while (*magicWord) {
for (int i = 0; i < 7; ++i) {
magicValue[i] += magicArray[i][*magicWord];
fullyRealResult += magicMap[i][magicValue[i]];
++magicMap[i][magicValue[i]];
}
++magicWord;
}
printf("%lld\n", fullyRealResult);
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 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | #include <cstdio> #include <unordered_map> using namespace std; const int MAGIC_CONSTANT = 323232; char magicBuf[MAGIC_CONSTANT]; long long magicArray[7][128]; int main() { // ABC magicArray[0]['a'] = 1; magicArray[0]['b'] = 0 - MAGIC_CONSTANT - 1; magicArray[0]['c'] = MAGIC_CONSTANT; // AB magicArray[1]['a'] = 1; magicArray[1]['b'] = 0 - 1; magicArray[1]['c'] = MAGIC_CONSTANT; // BC magicArray[2]['a'] = MAGIC_CONSTANT; magicArray[2]['b'] = 1; magicArray[2]['c'] = 0 - 1; // CA magicArray[3]['a'] = 1; magicArray[3]['b'] = MAGIC_CONSTANT; magicArray[3]['c'] = 0 - 1; // A magicArray[4]['a'] = 0; magicArray[4]['b'] = 1; magicArray[4]['c'] = 1; // B magicArray[5]['a'] = 1; magicArray[5]['b'] = 0; magicArray[5]['c'] = 1; // C magicArray[6]['a'] = 1; magicArray[6]['b'] = 1; magicArray[6]['c'] = 0; char *magicWord = magicBuf; scanf("%s", magicWord); long long magicValue[7]; unordered_map<long long, int> magicMap[7]; for (int i = 0; i < 7; ++i) { magicValue[i] = 0; ++magicMap[i][magicValue[i]]; } long long fullyRealResult = 0; while (*magicWord) { for (int i = 0; i < 7; ++i) { magicValue[i] += magicArray[i][*magicWord]; fullyRealResult += magicMap[i][magicValue[i]]; ++magicMap[i][magicValue[i]]; } ++magicWord; } printf("%lld\n", fullyRealResult); return 0; } |
English