Cod sursa(job #1900535)

Utilizator andru47Stefanescu Andru andru47 Data 3 martie 2017 14:26:39
Problema Triplete Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.2 kb
#include <bits/stdc++.h>
using namespace std;
int lii,jii,lff,jff,f[40005],n;
inline int numara (int p1, int p2)
{
    return (p2 - p1);
}
int main()
{
    freopen("piata.in","r",stdin);
    freopen("piata.out","w",stdout);

    scanf("%d\n", &n);
    scanf("%d %d\n%d %d\n", &lii, &jii, &lff, &jff);
    for (int i = 1; i<=n; ++i)
    {
        int x = i;
        int s = 0;
        while(x)
            s += x % 10 , x/=10;
        f[i] = s;
    }
    int initial = 0;

    if (lii == 1)
        initial = 1;
    else initial = n - (lii - 2) ;
    int s = 0;

    int schimbari = lff - lii;
    for (int i = 1; i<=n; ++i)
    {
        int nrr = initial;
        ++initial;
        if (initial > n)
            initial = 1;
        if (i < jii)
        {
            int sch = numara(i , jii);
            while (sch <= schimbari)
            {
                s += f[nrr];
                s +=  min(max(0,schimbari - sch),numara(jii , jff)) * f[nrr];
                sch += numara(jii , n), ++sch, sch += numara(1, jii);
            }
        }
        else if (i >= jii && i<= jff)
        {
            int sch = numara(i , jff);
            int ci = i;
            if (sch > schimbari)
                s += f[nrr] * (schimbari + 1);
            else
            {
                s += f[nrr];
                s += numara(ci , jff) * f[nrr];
                sch += numara(jff , n), ++sch , sch += numara(1, jii);
                ci = jii;
                while(sch <= schimbari)
                {
                    s += f[nrr];
                    s += min(max(0,schimbari - sch),numara(ci , jff)) * f[nrr];
                    sch += numara(ci , n), ++sch , sch += numara(1, jii);
                    ci = jii;
                }
            }
        }
        else
        {
            int sch = numara(i , n);
            ++sch;
            sch += numara(1 , jii);
            while(sch <= schimbari)
            {
                s += f[nrr];
                s +=  min(max(0,schimbari - sch),numara(jii , jff)) * f[nrr];
                sch += numara(jii , n), ++sch, sch += numara(1, jii);
            }
        }
    }
    printf("%d\n", s);
    return 0;
}