883H - Palindromic Cut - CodeForces Solution


brute force implementation strings *1800

Please click on ads to support us..

C++ Code:

#include "bits/stdc++.h"
using namespace std;
const int N=4e5+10,M=125;
int mp[M],ans;
vector<char>ss;
int n;string s;
int check(){
    int j=0;
    while(true)
    {
        ans=ss.size();
        int c=(n-ans)>>1;
        if(c%ans==0)//每组多少对.
            return c;
        while(j<M&& !mp[j])
            j++;
        mp[j]--;
        ss.push_back(char(j));
        ss.push_back(char(j));
    }
}
int main(){
    memset(mp,0,sizeof(mp));
    cin>>n>>s;
    for (int i = 0; i <n ; ++i) {
        mp[s[i]]++;
    }
    for(int i=0;i<M;i++)
    {
        if(mp[i]%2)
            ss.push_back(char(i));
        mp[i]/=2;
    }
    if(ss.size()==0)
    {
        cout<<1<<endl;
        string B="";
        for(int j=0;j<M;j++)
            for(int k=0;k<mp[j];k++)
                B+=char(j);
        string C=B;
        reverse(C.begin(),C.end());
        B+=C;
        printf("%s\n",B.c_str());
        return 0;
    }
    int c=check(),j=0;
    cout<<ans<<endl;
    for (int i = 0; i <ans ; ++i) {
        char x=ss[i];
        int d=c/ans;
        string B="";
        while (1){
            while(j<M&& !mp[j]) j++;
            if (mp[j]>=d){
                for(int k=0;k<d;k++)
                    B+=char(j);
                mp[j]-=d,d=0;
                break;
            }
            else {
                for(int k=0;k<mp[j];k++)
                    B+=char(j);
                d-=mp[j],mp[j]=0;
            }
        }
        string C=B;
        reverse(C.begin(),C.end());
        B=B+x+C;
        printf("%s ",B.c_str());
    }
}


Comments

Submit
0 Comments
More Questions

1430C - Numbers on Whiteboard
1697B - Promo
208D - Prizes Prizes more Prizes
659A - Round House
1492C - Maximum width
171B - Star
1512B - Almost Rectangle
831B - Keyboard Layouts
814A - An abandoned sentiment from past
268C - Beautiful Sets of Points
1391C - Cyclic Permutations
11A - Increasing Sequence
1406A - Subset Mex
1365F - Swaps Again
50B - Choosing Symbol Pairs
1719A - Chip Game
454B - Little Pony and Sort by Shift
1152A - Neko Finds Grapes
1719B - Mathematical Circus
1719C - Fighting Tournament
1642A - Hard Way
285C - Building Permutation
1719E - Fibonacci Strings
1696C - Fishingprince Plays With Array
1085A - Right-Left Cipher
1508B - Almost Sorted
1690C - Restoring the Duration of Tasks
1055A - Metro
1036D - Vasya and Arrays
1139C - Edgy Trees