文章

232

粉丝

165

获赞

380

访问

141.7k

头像
文件压缩 题解:
P1078
发布于2026年4月10日 10:03
阅读数 239

#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
char r[10050],l[10050],ans[10050],book[10050];
int len,p;
bool cmp(char a,char b)
{
    return a<b;
}//排序左部字符串
int main()
{
    scanf("%d",&len);
    for(int i=1;i<=len;i++)cin>>r[i];
    scanf("%d",&p);
    for(int i=1;i<=len;i++)l[i]=r[i];
    sort(l+1,l+len+1,cmp);
    int idx;
    for(int i=1;i<=len;i++)
        if(l[i]==r[p])
        {
            idx=i;
            break;
        }//从前往后找到左部中原串首字母所在位置
    int temp=len;
    while(temp>=1)//倒着生成原串
    {
        ans[temp--]=r[idx];
        for(int i=len;i>=1;i--)//倒着找左部字符串中的r[idx]
            if(l[i]==r[idx]&&!book[i])
            {
                book[i]=1;//注意标记这个串已经找过
                idx=i;
                break;
            }
    }
    for(int i=1;i<=len;i++)putchar(ans[i]);//正序输出
    return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发