首页 > 其他 > 详细

C. A-B Palindrome

时间:2021-05-23 14:57:30      阅读:14      评论:0      收藏:0      [点我收藏+]

题意:

给出一串由0,1,?组成的字符串,要求把?变成0或1,保证字符串为回文字符串且满足有a个0,b个1。

题解:

在cf上看到的大佬写的极短的题解(某菜写出来也太长了)。

ACcode:

int main()
{
    int t;
    cin >> t;
    while (t--)
    {
        int a, b;
        string s;
        cin >> a >> b >> s;
        int len = a + b;
        for (int i = 0; i < len; i++)
            if (s[i] == ?)
            s[i] = s[len - i - 1];
        a -= count(s.begin(), s.end(), 0);
        b -= count(s.begin(), s.end(), 1);//将已经填好的0,1数减去,方便之后填数
        for (int i = 0; i <= len / 2; i++)
        {
            if (i != len - i - 1 && s[i] == ?)
            {
                if (a >1) { s[i] = 0; s[len - i - 1] = 0; a -= 2; }
                else if (b >1) { s[i] = 1; s[len - i - 1] = 1; b -= 2; }
            }//不是中间字符时,即两边都是?时
            else if(s[i]==?)
            {
                if (a>0) {
                    s[i] = 0; a--;
                }
                else if (b > 0)
                {
                    s[i] = 1; b--;
                }
            }//中间是?时,选不为0的字符填上
        }
        string v = s;
        reverse(v.begin(), v.end());
        if (v == s&&a==0&&b==0)cout << s << endl;
        else cout << "-1" << endl;//判断是否回文
    }
    return 0;
}

(? ?_?)?

 

C. A-B Palindrome

原文:https://www.cnblogs.com/Uiney117/p/14800539.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!