Cod sursa(job #1751927)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 2 septembrie 2016 13:03:33
Problema Invers Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 10050

using namespace std;

char s[MAXN];
int n, t[MAXN];

int solve(int cat)
{
	int n = strlen(s)-1;
	if (n < 0) return 0;
    t[n] = t[0] = cat;
    for (int i = n; i >= 0; i--) {
        t[i-1] = s[n-i] - s[i] + t[i+1];
        if (t[i-1] != 0 && t[i-1] != 1)
			return 0;
		if (n-i+1 >= i-1 && t[n-i+1] != t[i-1])
			return 0;
		if (n-i == i && (t[i]*10+(s[i]-0)-t[i-1]) % 2)
			return 0;
		t[n-i+1] = t[i-1];
    }
	return 1;
}

int main()
{
	freopen("invers.in", "r", stdin);
	freopen("invers.out", "w", stdout);

	int t;
	scanf("%d\n", &t);
	while (t--) {
        scanf("%s", s);
        int rez = solve(0);
		if (rez)
			printf("DA\n");
		else {
			if (s[0] != '1')
				printf("NU\n");
			else {
				for (int i = 0, t = strlen(s); i < t; i++)
					s[i] = s[i+1];
				printf(solve(1) ? "DA\n" : "NU\n");
			}
		}
	}

    return 0;
}