Cod sursa(job #1769374)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 2 octombrie 2016 14:16:25
Problema Invers Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("invers.in");
ofstream g("invers.out");
char s[10002];
int v[10002];
bool Check(int x,int y){
    int i;
    if(x>y) return 0;
    memset(v,0,sizeof v);
    for(i=1;i<=y;i++) v[i]=s[i]-'0';
    if(x==1&&!v[y]) return 0;
    while(x<y){
        if(v[x-1]>1) return 0;
        if(v[x-1]==1) v[x]+=10;
        if(v[x]>=v[y]+10){
            for(i=y-1;i>0;i--)
                if(v[i]>0){
                    v[i]--;
                    break;
                }
                else v[i]=9;
            v[y]+=10;
        }
        if(v[x]<v[y]||v[y]==19) return 0;
        v[x]-=v[y];
        x++;
        y--;
    }
    if(x==y) return (!(v[x]&1)&&v[x-1]<2);
    else return !v[y];
}
int main(){
    int t,n;
    f>>t;
    while(t--){
        f>>(s+1);
        n=strlen(s+1);
        if(Check(1,n)||Check(2,n)) g<<"DA\n";
        else g<<"NU\n";
    }
    return 0;
}