이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
using namespace std;
#define debug(x) cerr << " - " << #x << ": " << x << '\n';
#define debugs(x, y) cerr << " - " << #x << ": " << x << " " << #y << ": " << y << '\n';
#define debugv(v) cerr << #v << " : " << "[ "; for(auto it : v) cerr << it << " ,"; cerr << ']' << "\n";
int main(){
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int tt;
  cin >> tt;
  while(tt--){
    string ss ; 
    cin >> ss ; 
    int n = ss.length();
    map<char, vector<int>>mp;
    map<char , int>start;
    for(int i = 0 ; i < n; i++){
      mp[ss[i]].push_back(i);        
      start[i] = 0;
    }
    int ans = 1;
    for(int i = n-1,qs = 0 ; qs< n/2 ; i--,qs++){
      char q = ss[i];
      string acc;
      string against;
      bool is = 1;
      int idx = qs;
      start[q] = lower_bound(mp[q].begin(),mp[q].end(),qs)-mp[q].begin();
      for(int j = start[q] ; j < (int)mp[q].size() ; j++){
        if(mp[q][j]>=n/2)break;
        acc += ss.substr(idx , mp[q][j]-idx+1);
        int rs = acc.length();
        against  = ss.substr(i-rs+1 , rs);
        idx = mp[q][j]+1;
        if(against == acc){
          acc.clear();
          ans+=2;
          against.clear();
          i =i-rs+1;
          qs = mp[q][j];
          if(qs+1==i)ans--;
          is = 0;
          break;  
        }
        start[q] = j+1;
      }
      if(is)break;        
    }
    cout << ans << '\n';
  }
  return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |