Cod sursa(job #1723991)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 1 iulie 2016 23:34:18
Problema Invers Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<cstdio>
#include<cstring>
#define MAXDIGITS 10000
using namespace std;
char s[MAXDIGITS];
int v[MAXDIGITS];
bool Check(int left,int right){
    int i;
    if(left>right)
        return false;
    memset(v,0,sizeof(v));
    for(i=1;i<=right;i++)
        v[i]=s[i]-'0';
    if(left==1&&v[right]==0)
        return false;
    while(left<right){
        if(v[left-1]>1)
            return false;
        if(v[left-1]==1)
            v[left]+=10;
        if(v[left]>=v[right]+10){
            for(i=right-1;i>0;i--)
                if(v[i]>0){
                    v[i]--;
                    break;
                }
                else
                    v[i]=9;
            v[right]+=10;
        }
        if(v[left]<v[right])
            return false;
        if(v[right]==19)
            return false;
        v[left]-=v[right];
        left++;
        right--;
    }
    if(left==right)
        if(v[left]%2==0&&v[left-1]<2)
            return true;
        else
            return false;
    else
        if(v[right]==0)
            return true;
        else
            return false;
}
int main(){
    freopen("invers.in","r",stdin);
    freopen("invers.out","w",stdout);
    int tests,test,n;
    scanf("%d",&tests);
    for(test=1;test<=tests;test++){
        scanf("%s",s+1);
        n=strlen(s+1);
        if(Check(1,n)==true||Check(2,n)==true)
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}