1 / 2
May 2018

I cannot understand on what input my code fails. It’s giving correct output on every input, but wrong answer on SPOJ. Here is my code, Please someone find my mistake-
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int main()
{

long long int t,mm;
int flaa=0,prte=0;
scanf("%lld",&t);
for(mm=0;mm<t;mm++)
{
    char s[1000003];
    long long i=0,l,j;
    scanf("%s",s);
    while(s[i]!='\0')
    ++i;
    //cout<<i<<"\n";
    j=i;
    //digits achieved
    while(i)
    {
        if(s[i-1]=='9')
        {s[i-1]='0';}//printf("%c\n",s[i-1]);}
        else
        {++s[i-1];break;}
        --i;
    }
    i=j;
    if(s[0]=='0')
    {
        printf("1");
        while(i-1)
        {printf("0");--i;}
        printf("1\n");
        flaa=1;    prte=1;
    }
    //cout<<s<<"\n";
    i=j;
    //increased the digit by one & PRINTED 1....0....1 if all digits in 9s format.
    if(flaa==0)
    {
        while(i-1>=j/2)
        {
            if(s[j-i]==s[i-1])
            --i;
            else
            {flaa=1;break;}
        }
        if(i-1==j/2&&flaa==0)
        {printf("%s\n",s);   flaa=1;   prte=1;}
        if(prte==0)
        flaa=0;
    }
    //cout<<"this is palindromic magical no.   "<<i<<"\n";
    i=j;
    //checked if palindrome exists, IF YES PRINTED IT.


    if(flaa==0)
    {
        l=i/2-1;
        while(l!=-1&&prte==0)
        {
            //GAME BEGINS FOR ODD NUMBERS.
            if(s[i-l-1]!=s[l]&&flaa==0&&i%2!=0)
            {
                if(s[l]<s[i-1-l]&&s[j/2]!='9')
                {
                    ++s[j/2];
                    s[i-l-1]=s[l];
                    flaa=1;
                }
                //flag on, for odd digits, mid!=9
                else if(s[l]<s[i-1-l]&&s[j/2]=='9')
                {
                    s[j/2]='0';
                    flaa=1;
                    j=j/2;
                    while(j-1!=-1)
                    {
                        if(s[j-1]=='9')
                        {
                            s[j-1]='0';
                            s[i-j]=s[j-1];
                            --j;
                        }
                        else
                        {++s[j-1];  s[i-j]=s[j-1];  break;}
                    }
                    j=i;
                    if(s[0]=='0')
                    {
                        printf("1");
                        while(i-1)
                        {printf("0");--i;}
                        printf("1\n");
                        i=j;
                        prte=1;
                    }
                    //printing combo.
                }
                //flag on, for odd digits when mid==9 & continue increasing digits on left making right equal.
            }
            //GAME BEGINS FOR EVEN DIGITS.
            else if(flaa==0&&i%2==0)
            {
                if(s[j/2-1]!='9'&&s[l]<s[j-l-1])
                {
                    ++s[j/2-1];
                    s[j-j/2]=s[j/2-1];
                    s[i-l-1]=s[l];
                    flaa=1;
                }
                //flag on, for even digits, mid-1!=9
                else if(s[j/2-1]=='9'&&s[l]<s[j-l-1])
                {
                    s[j/2-1]='0';
                    s[j-j/2]=s[j/2-1];
                    flaa=1;
                    j=j/2;
                    while(j-1!=-1)
                    {
                        if(s[j-1]=='9')
                        {
                            s[j-1]='0';
                            s[i-j]=s[j-1];
                            --j;
                        }
                        else
                        {++s[j-1];  s[i-j]=s[j-1];  break;}
                    }
                    j=i;
                    if(s[0]=='0')
                    {
                        printf("1");
                        while(i-1)
                        {printf("0");--i;}
                        printf("1\n");
                        i=j;
                        prte=1;
                    }
                    //printing combo.
                }
                //flag on, for even digits when mid-1==9 & continue increasing digits on left making right equal.
            }
            if(s[l]>s[j-l-1]&&i%2==0)
            flaa=1;
            s[i-l-1]=s[l];
            --l;
        }
    }
    if(prte==0)
    printf("%s\n",s);
    flaa=0;
    prte=0;
}
return 0;

}

  • created

    May '18
  • last reply

    May '18
  • 1

    reply

  • 626

    views

  • 2

    users

Try this:

3
929993774
97268982378
972692378

Expected answer

929999929
97268986279
972696279

Suggested Topics

Topic Category Replies Views Activity
C and C++ 0 17 10d

Want to read more? Browse other topics in C and C++ or view latest topics.