Cod sursa(job #712596)

Utilizator dadudadUdrea Dragos dadudad Data 13 martie 2012 17:13:01
Problema Invers Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
001.
#include <cstdio>
002.
 
003.
const int N = 10005;
004.
 
005.
int n, a[N], b[N];
006.
 
007.
void read() {
008.
char s[N];
009.
 
010.
gets(s);
011.
 
012.
n = 0;
013.
 
014.
for (int i = 0; s[i]; ++ i) {
015.
++ n;
016.
a[n] = b[n] = s[i] - '0';
017.
}
018.
}
019.
 
020.
bool solve(int st, int dr) {
021.
int i, dc;
022.
 
023.
while (1) {
024.
if (st == dr)
025.
return (1 - (a[st] % 2));
026.
 
027.
if (st == dr - 1)
028.
return (a[st] == a[dr] || a[st] == a[dr] + 11);
029.
 
030.
dc = a[st] - a[dr];
031.
 
032.
if (dc != 0 && dc != 1 && dc != 10 && dc != 11)
033.
return 0;
034.
 
035.
if (dc == 1 || dc == 11)
036.
a[st + 1] += 10;
037.
 
038.
if (dc >= 10) {
039.
if (a[dr] == 9)
040.
return 0;
041.
 
042.
int i;
043.
 
044.
for (i = dr - 1; a[i] == 0; -- i)
045.
a[i] = 9;
046.
 
047.
a[i] --;
048.
 
049.
if (i == st)
050.
return 0;
051.
}
052.
 
053.
++ st;
054.
-- dr;
055.
}
056.
}
057.
 
058.
int main() {
059.
freopen("invers.in", "r", stdin);
060.
freopen("invers.out", "w", stdout);
061.
 
062.
int T = 0;
063.
 
064.
scanf("%d\n", &T);
065.
 
066.
for (; T > 0; -- T) {
067.
read();
068.
 
069.
if (n == 1) {
070.
if (a[1] % 2 == 1) {
071.
printf("NU\n");
072.
continue;
073.
}
074.
 
075.
printf("DA\n");
076.
continue;
077.
}
078.
 
079.
if (a[n] > 0)
080.
if (solve(1, n)) {
081.
printf("DA\n");
082.
continue;
083.
}
084.
 
085.
if (a[1] != 1) {
086.
printf("NU\n");
087.
continue;
088.
}
089.
 
090.
for (int i = 1; i < n; ++ i)
091.
a[i] = b[i + 1];
092.
 
093.
a[1] += 10;
094.
 
095.
if  (solve(1, n - 1))
096.
printf("DA\n");
097.
else
098.
printf("NU\n");
099.
}
100.
 
101.
return 0;
102.
}