Cod sursa(job #1686140)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 12 aprilie 2016 08:47:25
Problema Invers Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#include<fstream>
#include<cstring>
using namespace std;
ifstream f("invers.in");
ofstream g("invers.out");
int n,a[10005],b[10005];
bool solve(int st,int dr)
{
    int i,dc;
    while(1)
    {
        if(st==dr)
          return (1-(a[st]%2));
        if(st==dr-1)
          return(a[st]==a[dr]||a[st]==a[dr]+11);
        dc=a[st]-a[dr];
        if(dc!=0&&dc!=1&&dc!=10&&dc!=11)
          return 0;
        if(dc==1||dc==11)
          a[st+1]+=10;
        if(dc>=10)
        {
            if(a[dr]==9)
              return 0;
            int i;
            for(i=dr-1;a[i]==0;--i)
              a[i]=9;
            a[i]--;
            if(i==st)
              return 0;
        }
        ++st;
        --dr;
    }
}
int main()
{
    int t=0;
    f>>t;
    char s[3];
    f.getline(s,3);
    while(t)
    {
        t--;
        char s[10005];
        f.getline(s,10005);
        n=0;
        for(int i=0;s[i];++i)
        {
            ++n;
            a[n]=b[n]=s[i]-'0';
        }
        if(n==1)
        {
            if(a[1]%2==1)
            {
                g<<"NU\n";
                continue;
            }
            g<<"DA\n";
            continue;
        }
        if(a[n]>0)
          if(solve(1,n))
          {
              g<<"DA\n";
              continue;
          }
        if(a[1]!=1)
        {
            g<<"NU\n";
            continue;
        }
        for(int i=1;i<n;++i)
          a[i]=b[i+1];
        a[1]+=10;
        if(solve(1,n-1))
          g<<"DA\n";
        else
          g<<"NU\n";
    }
    return 0;
}