Cod sursa(job #2550731)

Utilizator robert.barbu27robert barbu robert.barbu27 Data 19 februarie 2020 09:04:15
Problema Invers Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
#include <functional>
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("invers.in");
ofstream g("invers.out");

char s[10005];
int T,v[10005];
bool check(int i,int j)
{
    for(int d=1;d<=j;d++) v[d]=s[d]-'0';
     if(i==1&&v[i]==0) return false;
       while(i<j)
       {if(v[i-1]!=0&&v[i-1]!=1) return false;
       if(v[i-1]==1) v[i]+=10;
           if(v[i]>=v[j]+10)
           {
               for(int d=j-1;d>=1;d--)
               {
                   if(v[d]>0)
                   {
                       v[d]--;
                       break;
                   }
                   else v[d]=9;
               }
                v[j]=v[j]+10;
           }

           v[i]=v[i]-v[j];
           i++;
           j--;
       }
       if(i!=j)
       {
           if(v[j]==0) return true;
           return false;
       }
       if(v[i-1]<2&&(v[i]%2==0)) return true;
       else return false;
}
int main()
{
    /*
    int cnt=0;
   for(int i=10;i<=300000;i++)
   {
       int ci=i;
       int nr=0;
       while(ci>0)
       {
           nr=nr*10+ci%10;
           ci=ci/10;
       }
       v[++cnt]=i+nr;
       if(i+nr==111621) cout<<nr<<" ";

   }
   sort(v+1,v+cnt+1);
   for(int i=1;i<=cnt;i++)
   {
       g<<v[i]<<" ";
       if(i%10==0) g<<'\n';
   }
   */
   f>>T;
   while(T)
   {
       T--;
       f>>(s+1);
       int n=strlen(s+1);
       if(check(1,n)||check(2,n)) g<<"DA"<<'\n';
       else g<<"NU"<<'\n';
   }

}