#include #include #include using namespace std; int n; char S[100010]; int num[26]; int tmp[26]; int stronger(string str,int m){ //idxはアルファベット if(str.length()==0 || m<=0){ int cnt = 0; for(int i=0;i<=25;++i) cnt+=num[i]; int rest = max(0,cnt-m); return min(cnt,m)+rest/5; } int c = str[0]-'a'; int cnt = 0; for(int i=c+1;i<=25;++i) cnt+=num[i]; if(cnt>=m) return m; for(int i=c+1;i<=25;++i){ tmp[i] = num[i]; num[i]=0; } m-=cnt; int ret = 0; if(num[c]==0){ int rest = 0; for(int i=0;i<=25;++i) rest+=num[i]; return rest/str.length(); } for(int k=1;k<=min(num[c],m);++k){ num[c]-=k; ret = max(ret,stronger(str.substr(1,str.length()-1),k)); num[c]+=k; } for(int i=c+1;i<=25;++i) num[i] = tmp[i]; return ret+cnt; } void solve(){ sort(S,S+n); for(int i=0;i