Cod sursa(job #70779)

Utilizator moga_florianFlorian MOGA moga_florian Data 7 iulie 2007 13:33:02
Problema Invers Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
using namespace std;
#include<fstream>
#include<stdio.h>
#define Nmax 10005

int V[Nmax];
int A[Nmax];
char s[Nmax];

int verif(int st,int dr)
{
int i;
    
while(st != dr-1 && st!=dr)
   {
   if(A[st] - A[dr] == 0);
   else
   if(A[st] - A[dr] == 1)
      A[st+1]+=10;
   else
   if(A[st] - A[dr] == 10)
      {
      if(A[st]==19) 
           return 0;            
           
      i=dr-1;
      while(A[i]==0) 
           {
           A[i]=9;
           i--;      
           }
      A[i]--;
      
      if(i==st) 
        return 0;    
      }
   else
   if(A[st] - A[dr] == 11)
      {
      A[st+1]+=10;
            
      i=dr-1;
      while(A[i]==0) 
           {
           A[i]=9;
           i--;      
           }
      A[i]--;
      }
   else
      return 0;
         
   st++;dr--;   
   }
      
if(st==dr && A[st]%2 )
      return 0;

if(st==dr-1 && A[st]!=A[dr] && A[st]-A[dr]!=11)
      return 0;
    
return 1;
}

int main()
{
ifstream fin("invers.in");
ofstream fout("invers.out");     

int T,i,N;
fin>>T;

while(T--)
 {
 fin>>s;
 for(N=0; s[N]; N++)
   V[N+1]= A[N+1]= s[N] - '0';
  
 if( verif(1,N) )
    fout<<"DA\n";
 else
 if( V[1]==1 && N>1 )
    {
    for(i=2;i<=N;i++)
       A[i-1]=V[i];
    A[1]+=10;
    
    if(verif(1,N-1))
        fout<<"DA\n";
    else
        fout<<"NU\n";
    }
 else
    fout<<"NU\n";
 } 
 
fin.close();
fout.close();
return 0;       
}