hiho一下 第230周 Smallest Substring

ZMST發表於2018-12-20

題目連結:

#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
vector<int>G[27];
int vis[27];
int k;
char s[100010];
char str[100010];
int main()
{
    cin>>k;
    cin>>s;
    int n=strlen(s);
    for(int i=0;i<27;i++)
        G[i].clear();
    for(int i=0;i<n;i++)
    {
        int u=s[i]-96;
        G[u].push_back(i);
    }
    memset(vis, 0, sizeof(vis));
    int pos=-1;
    for(int i=0;i<k;i++)
    {
        bool flag=false;
        for(int j=1;j<27;j++)
        {
            int u=vis[j];
            if(u>=G[j].size())
                continue;
            for(int y=u;y<G[j].size();y++)
            {
                int x=G[j][y];
                if(n-1-x>=k-i-1&&x>pos)
                {
                    str[i]=s[x];
                    pos=x;
                    vis[j]=y+1;
                    flag=true;
                    break;
                }
            }
            if(flag)
                break;
        }
    }
    str[k]='\0';
    cout<<str<<endl;
    return 0;
}

 

相關文章