Cod sursa(job #70775)

Utilizator moga_florianFlorian MOGA moga_florian Data 7 iulie 2007 13:22:51
Problema Invers Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include<stdio.h>

int V[10005];
int A[10005];

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()
{
FILE *fin=fopen("invers.in","r"),
     *fout=fopen("invers.out","w");
     
int T,i,N;
char ch;
fscanf(fin,"%d\n",&T);

while(T--)
 {
 N=0;
 ch=fgetc(fin);
 while(ch!='\n' && ch!=EOF)
    {
    V[++N]= ch-'0';          
    if(N==1 && V[1]==0) N--;
    A[N]=V[N];
    ch=fgetc(fin);
    }
 
 if( verif(1,N) )
    fprintf(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))
       fprintf(fout,"DA\n");         
    else
       fprintf(fout,"NU\n");
    }
 else
 fprintf(fout,"NU\n");    
 } 
 
fclose(fin);
fclose(fout);
return 0;       
}