1
0

洛谷-P9753.cpp 658 B

123456
  1. #include <cstdint>
  2. #include <iostream>
  3. #include <unordered_map>
  4. #include <vector>
  5. using namespace std;
  6. int main(){ios::sync_with_stdio(false);cin.tie(nullptr);int n;string s;cin>>n>>s;vector<int>parent(1);vector<char>top(1);vector<long long>frequency(1,1);unordered_map<uint64_t,int>id;id.reserve(n*2);int state=0;long long answer=0;for(unsigned char c:s){if(state&&top[state]==c)state=parent[state];else{uint64_t key=(uint64_t(state)<<8)|c;auto it=id.find(key);if(it==id.end()){state=parent.size();id[key]=state;parent.push_back((int)(key>>8));top.push_back(c);frequency.push_back(0);}else state=it->second;}answer+=frequency[state]++;}cout<<answer<<'\n';}