予鈴

競プロとか備忘録とか…

ARCのB :回文分割

個人的にすごく苦しんだ。(同期はプログラミング始めて二ヶ月でACしてる)
偶奇に分けて、奇数なら2で割った値をsumに足す。
sumを2で割ると"偶数のペア"の数がわかるから、奇数にいくつ肉付けできるかがわかる。
(イメージは、奇数は(1+偶数)になっているから、'偶数'をすべて sumに足す。 sum / ki_sizeで再分配するペアに数がわかる。)
最後の+1は余り

#include<iostream>
#include<string>
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<cmath>
#include<utility>
#include<set>
#include<complex>
#include<map>
#define vi vector<int>
#define vvi vector<vector<int> >
#define ll long long int
#define vl vector<ll>
#define vvl vector<vector<ll>>
#define vb vector<bool>
#define vc vector<char>
#define vs vector<string>
#define ld long double
#define INF 1e9
#define EPS 0.0000000001
#define rep(i,n) for(int i=0;i<n;i++)
#define loop(i,s,n) for(int i=s;i<n;i++)
#define all(in) in.begin(), in.end()
#define MAX 9999999
using namespace std;
typedef pair<int, int> pii;
int main(){
    string s;cin>>s;
    vi v(26,0);rep(i,s.size())v[s[i]-'a']++;
    int sum=0,ki_size=0;
    rep(i,26){
        if(v[i]==0)continue;
        if(!(v[i]%2))sum+=v[i];
        else {
            sum+=(2*(v[i]/2));
            ki_size++;
        }
    }
    sum=sum/2;
    if(ki_size)cout<<2*(sum/ki_size)+1<<endl;
    else cout<<s.size()<<endl;
}