Cod sursa(job #2940851)

Utilizator IvanAndreiIvan Andrei IvanAndrei Data 16 noiembrie 2022 17:42:41
Problema Pavare2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.8 kb
/// proba sa ma asigur ca nu pica dinamica si signal 11
#include <fstream>
#include <string>

using namespace std;

ifstream in ("pavare2.in");
ofstream out ("pavare2.out");

int dp[101][2][101][101], v[101];

void suma (int s[], int x[], int y[])
{
    int t = 0, i;
    for (i = 1; i <= x[0] || i <= y[0]; i++)
    {
        int aux = x[i] + y[i] + t;
        s[i] = aux % 10;
        t = aux / 10;
    }
    s[0] = i - 1;
    if (t > 0)
    {
        s[++s[0]] = t;
    }
}

int main ()
{
    dp[1][0][1][0] = 1;
    dp[1][0][1][1] = 1;
    dp[1][1][1][0] = 1;
    dp[1][1][1][1] = 1;
    int n, a, b;
    string aaaaaaa;
    in >> n >> a >> b >> aaaaaaa;
    for (int i = 1; i < n; i++)
    {
        for (int j = 0; j < 2; j++)
        {
            if (j == 0)
            {
                for (int k = 1; k < a; k++)
                {
                    suma(dp[i + 1][j][k + 1], dp[i + 1][j][k + 1], dp[i][j][k]);
                    suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][k]);
                }
                suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][a]);
            }
            else
            {
                for (int k = 1; k < b; k++)
                {
                    suma(dp[i + 1][j][k + 1], dp[i + 1][j][k + 1], dp[i][j][k]);
                    suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][k]);
                }
                suma(dp[i + 1][1 - j][1], dp[i + 1][1 - j][1], dp[i][j][b]);
            }
        }
    }
    for (int k = 1; k <= a; k++)
    {
        suma(v, v, dp[n][0][k]);
    }
    for (int k = 1; k <= b; k++)
    {
        suma(v, v, dp[n][1][k]);
    }
    for (int i = v[0]; i > 0; i--)
    {
        out << v[i];
    }
    in.close();
    out.close();
    return 0;
}