Cod sursa(job #2922462)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 8 septembrie 2022 15:58:29
Problema Invers Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 kb
/// Preset de infoarena
#include <fstream>

using namespace std;

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

string str;
int aux[10005], v[10005];

bool check(int st, int dr)
{
    if(st > dr)
        return 0;
    for(int i = 1; i <= dr; i++)
        v[i] = aux[i];
    if(st == 1 && v[dr] == 0)
        return 0;
    while(st < dr)
    {
        if((v[st - 1] > 1) || (v[st - 1] < 0))
            return 0;
        if(v[st - 1] == 1)
            v[st] += 10;
        if(v[st] - v[dr] > 9)
        {
            int poz = dr - 1;
            while(v[poz] <= 0)
            {
                v[poz] = 9;
                poz--;
            }
            v[poz]--;
            v[dr] += 10;
        }
        if(v[dr] == 19)
            return 0;
        v[st] -= v[dr];
        st++;
        dr--;
    }
    if(v[st - 1] < 0)
        return 0;
    if(st == dr)
    {
        if((v[st] % 2 == 1) || (v[st - 1] > 1))
            return 0;
    }
    else if(v[st - 1] > 0)
        return 0;
    return 1;
}

void solve()
{
    fin >> str;
    for(int i = 0; i < str.size(); i++)
        aux[i + 1] = str[i] - '0';
    if(check(1, str.size()) || check(2, str.size()))
        fout << "DA\n";
    else
        fout << "NU\n";
}

int main()
{
    int nr_teste;
    fin >> nr_teste;
    while(nr_teste--)
        solve();
    return 0;
}