为什么我在Codechef的褪色回文中得到一个WA,即使我在我的代码中没有发现任何错误,它对我来说工作得很好

Why am I getting a WA in Faded Palindromes in Codechef even though I found no error till now in my code and its working fine for me?

本文关键字:代码 我的 发现 错误 对我来说 工作 很好 任何 一个 回文 褪色      更新时间:2023-10-16

我已经调试和查看了这段代码将近一个星期了,现在我仍然找不到任何解决方案,因此希望从堆栈溢出的开发人员那里得到一个。

这是九月挑战Codechef褪色回文问题的解决方案这是问题页面

#include<iostream>
#include<vector>
#include<iterator>
#include<stdlib.h>
#include<cstdio>
#include<string>
using namespace std;
string def="-1";
int main()
{
    int t;
    cin>>t;
    //vector<string> out(t);
    string out[100];
    for(int i=0;i<t;i++)
    {
        string inp;
        cin>>inp;
        if(inp.size()%2)   //Checking wether the number of letters is odd
        {
            int counter=inp.size()/2;
            int counter_back=counter-1;
            int counter_front=counter+1;
            if(inp[counter]=='.')
            inp[counter]='a';
            int not_fa=0;
            while(counter_back>=0&&counter_front<inp.size())
            {
                if(inp[counter_back]==inp[counter_front])
                  {counter_back--;counter_front++;}
                else if(inp[counter_back]=='.'&&inp[counter_front=='.']){
                inp[counter_back]=inp[counter_front]='a';
                counter_back--;counter_front++;
                }
                else if(inp[counter_back]=='.'){
                inp[counter_back]=inp[counter_front];
                counter_back--;counter_front++;
                }
                else if(inp[counter_front]=='.'){
                inp[counter_front]=inp[counter_back];
                counter_back--;counter_front++;
                }
                else{
                    not_fa=1;
                    break;
                }
            }
            if(not_fa)
               out[i]=def;
            else
                out[i]=inp;
        }
        else{      //Checking the number of letter is even
            //cout<<inp.size();
            int counter_front=(inp.size())/2;
            //cout<<counter_front;
            int counter_back=counter_front-1;
            //cout<<counter_back;
            int not_fa=0;
            while(counter_back>=0&&counter_front<inp.size())
            {
                if(inp[counter_back]==inp[counter_front])
                  {//cout<<"*-";
                  counter_back--;counter_front++;}
                else if(inp[counter_back]=='.'&&inp[counter_front]=='.'){
                inp[counter_back]=inp[counter_front]='a';
                counter_back--;counter_front++;
                }
                else if(inp[counter_back]=='.'){
                //cout<<"--";
                inp[counter_back]=inp[counter_front];
                counter_back--;counter_front++;
                }
                else if(inp[counter_front]=='.'){
                inp[counter_front]=inp[counter_back];
                counter_back--;counter_front++;
                }
                else{
                    not_fa=1;
                    break;
                }
            }
            if(not_fa)
                out[i]=def;
            else
                out[i]=inp;
        }
    }
    /*vector<string>::iterator itr;
    for(itr=out.begin();itr!=out.end();itr++)
        cout<<*itr<<endl;*/
    for(int j=0;j<t;j++)
    if(j==t-1)
        cout<<out[j];
    else
        cout<<out[j]<<"n";

    return 0;
}

虽然您的代码可以通过问题声明中提供的所有测试用例,但仍然有更多的边缘情况您的代码没有涵盖。下面是一个示例测试用例:

6
..
...
..e
a..a.v.
p..p
t.xzt

这应该打印:

aa
aaa
eae
avaaava
paap
tzxzt

而不是打印:

..
.a.
aaa
aa.a.aa
p..p
taxat 

提示:

  1. 第一个if语句没有正确处理inp[b]inp[f]都是'.'的情况。
  2. 当|s|为偶数或奇数时,不需要做两件不同的事情。
  3. 另外,在第一个else if语句中,您可能指的是inp[counter_front]=='.'而不是inp[counter_front=='.']

如果它们都等于'.',则

if(inp[counter_back]==inp[counter_front])为true,因此您不会填充该空白

相关文章: