https://atcoder.jp/contests/abc066/tasks/abc066_b
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
#include <ext/rope>
#define fastio ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
using namespace __gnu_cxx;
#define X first
#define Y second
#define int int64_t
#define sz(v) (int)(v).size()
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define Compress(v) sort(all(v)), (v).erase(unique(all(v)), (v).end())
#define OOB(x, y) ((x) < 0 || (x) >= n || (y) < 0 || (y) >= m)
#define IDX(v, x) (lower_bound(all(v), x) - (v).begin())
#define debug(x) cout << (#x) << ": " << (x) << '\n'
using ll = long long;
using ull = unsigned long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using tii = tuple<int, int, int>;
template <typename T>
using wector = vector<vector<T>>;
int32_t main(){
fastio;
string s; cin >> s;
for(int i = 0; i < s.size() - 1; i++){
auto temp = s.substr(0, s.size() - i - 1);
if(temp.size() % 2 == 0){
string a = temp.substr(0, temp.size() / 2),b = temp.substr(temp.size() / 2, temp.size());
if(a == b){
cout << temp.size();
break;
}
}
}
}
문자열의 길이는 무조건 짝수여야하고 왼쪽과 오른쪽이 같아야하기 때문에
s[:n / 2]와 s[n/2:]가 같아야 하는 것을 알 수 있습니다.