Cod sursa(job #1486591)

Utilizator akaprosAna Kapros akapros Data 15 septembrie 2015 10:17:03
Problema Plus Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#define maxN 100002
#define ct 3
#define ll long long
using namespace std;
int i, j;
ll s, mx, Mx, my, My, sol;
struct b
{
    ll n;
    ll val;
}v[ct];
void read()
{
    freopen("plus.in", "r", stdin);
    scanf("%lld", &s);
    for (i = 0; i < ct; ++ i)
        scanf("%lld %lld", &v[i].n, &v[i].val);
}
void solve()
{
    sol = 0;
    Mx = max(0LL, v[1].val * v[1].n);
    My = max(0LL, v[2].val * v[2].n);
    mx = min(0LL, v[1].val * v[1].n);
    my = min(0LL, v[2].val * v[2].n);
    for (i = 0; i <= v[0].n; ++ i)
    {
        if (v[1].val == 0)
        {
            if (!v[2].val)
            {
                if (s == 0)
                    sol += (v[1].n + 1) * (v[2].n + 1);
            }
            else
            {
                if (s / v[2].val <= v[2].n && s / v[2].val >= 0)
                    sol += (v[1].n + 1);
            }
        } else
        {
            if (!v[2].val)
            {
                if (s / v[1].val <= v[1].n && s / v[1].val >= 0)
                    sol += (v[2].n + 1);
            } else
            {
                if (min(s - mx, My) - max(s - Mx, my) + 1 > 0)
                    sol += min(s - mx, My) - max(s - Mx, my) + 1;
            }
        }
        s -= v[0].val;
    }
}
void write()
{
    freopen("plus.out", "w", stdout);
    printf("%lld", sol);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}