#include #define MAXN 10240 #define min(a, b) (((a) < (b)) ? (a) : (b)) char s[MAXN]; int mensi[MAXN], nove_mensi[MAXN],n; int kolik_cifer(int i, int z) { int m = -1,res; if (s[i] < s[n-z]) m = 1; else if (s[i] == s[n-z]) m = mensi[i+1]; else m = 0; nove_mensi[i] = m; if (s[i] == '0') /* připadá v úvahu jediná cifra - nula */ return 1; res = min(z-1+m, n-z-i); /* jinak máme nanejvýš res cifer */ return res; } int main(void) { int c[MAXN], p[MAXN]; int i, z, result; gets(s); n = strlen(s); for (i=0; i= s[n-1]) result = 0; if (s[i] < s[n-1]) mensi[i] = 1; } for (z=2; z=0; i--) { int h = kolik_cifer(i, z); p[i] = c[i+1] - c[i+h+1]; c[i] = c[i+1] + p[i]; } if (s[n-z] != '0') /* Pokud základ nezačíná nulou, bereme ho */ result += p[0]; for (i=0; i