【bestcoder #37】ABC题解

Rikka with string

Accepts: 395 Submissions: 2281
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
问题描述
众所周知,萌萌哒六花不擅长数学,所以勇太给了她一些数学问题做练习,其中有一道是这样的:
有一天勇太得到了一个长度为n的字符串,但是六花一不小心把这个字符串搞丢了。于是他们想要复原这一个字符串。勇太记得这个字符串只包含小写字母而且这个串不是回文串。然而不幸的是他已经不记得这个字符串中的一些字符了,你可以帮他复原这个字符串吗?
当然,这个问题对于萌萌哒六花来说实在是太难了,你可以帮帮她吗?
输入描述
多组数据,数据组数不超过20,每组数据第一行两个正整数n。接下来一行一个长度为n的只包含小写字母和’?’的字符串,’?’表示勇太已经忘了这一个位置的字符了。
1≤n≤103
输出描述
每组数据输出仅一行一个长度为n的仅包含小写字母的字符串,如果有多种合法解,请输出字典序最小的,如果无解,请输出”QwQ”
输入样例
5
a?bb?
3
aaa
输出样例
aabba
QwQ

贪心的一直填a,知道最后一个”?”判断一下。

但是要注意如果最后一个”?”在字符串的中间,最后一个填什么都改变不了他是回文串的现实,所以要特殊处理一下。

#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstdlib>
using namespace std;
int n;
char s[1005];
int Judge()
{
    for (int i=1;i<=n;i++)
    {
        if (s[i]!=s[n-i+1]) return 0;
    }
    return 1;
}
int main()
{
    while (scanf("%d",&n)!=EOF)
    {
        scanf("%s",s+1);
        int l=0;
        for (int i=1;i<=n;i++)
            if (s[i]=='?') l=i;
        if (!l&&Judge()) printf("QwQ\n");
        else
        {
            if ((n%2)&&l==(1+n)/2)
            {
                int p=0;
                for (int i=1;i<l;i++)
                    if (s[i]=='?') p=i;
                if (!p&&Judge()) printf("QwQ\n");
                else
                {
                    for (int i=1;i<=n;i++)
                        if (s[i]=='?') s[i]='a';
                    if (Judge())
                        s[p]='b';
                    for (int i=1;i<=n;i++)
                        printf("%c",s[i]);
                    printf("\n");
                }
            }
        else
        {
        for (int
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值