Cod sursa(job #179251)

Utilizator cretuMusina Rares cretu Data 15 aprilie 2008 19:23:14
Problema Pavare2 Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.4 kb
#include <fstream>
#define MAX 101

using namespace std;

int a[MAX][MAX][3][MAX], K;
int rez[MAX];
int n, A, B;

int main()
{
    int i, j, k, t, p;
    
    ifstream fin("pavare2.in");
    fin >> n >> A >> B >> K;
    fin.close();
            
    for (i = 1; i <= n; i++)   
    {
        for (j = 1; j <= A && j <= i; j++)
        {
            if (i == j) 
            {
               a[i][j][0][0] = 1;
               a[i][j][0][1] = 1;      
            }
            else
            {
                a[i][j][0][0] = 1;
                for (k = 1; k <= B && k <= i-j; k++)
                {
                     t = 0;
                     for (p = 1; p <= a[i][j][0][0] || p <= a[i-j][k][1][0] || t; p++, t/=10)  
                         a[i][j][0][p] = (t += a[i][j][0][p] + a[i-j][k][1][p]) % 10;  
                     a[i][j][0][0] = p-1;
                }
            }
        }
        for (j = 1; j <= B && j <= i; j++)
        {
            if (i == j) 
            {
               a[i][j][1][0] = 1;
               a[i][j][1][1] = 1;      
            }
            else
            {
                a[i][j][1][0] = 1;
                for (k = 1; k <= A && k <= i-j; k++)
                {
                    t = 0;
                    for (p = 1; p <= a[i][j][1][0] || p <= a[i-j][k][0][0] || t; p++, t/=10)  
                        a[i][j][1][p] = (t += a[i][j][1][p] + a[i-j][k][0][p]) % 10;  
                    a[i][j][1][0] = p-1; 
                }
            } 
        }
    }
    
    ofstream fout("pavare2.out");
    
    rez[0] = 1;
    
    for (i = 1; i <= A; i++)
    {
         t = 0;
         for (p = 1; p <= rez[0] || p <= a[n][i][0][0] || t; p++, t/=10)  
              rez[p] = (t += rez[p] + a[n][i][0][p]) % 10;  
         rez[0] = p-1;     
    }
    for (i = 1; i <= B; i++)
    {
         t = 0;
         for (p = 1; p <= rez[0] || p <= a[n][i][1][0] || t; p++, t/=10)  
              rez[p] = (t += rez[p] + a[n][i][1][p]) % 10;  
         rez[0] = p-1;     
    }
    for (i = rez[0]; i >= 1; i--)
       fout << rez[i];
    fout << "\n";
    
    j = 0;
    for (i = 1; i <= n; i++)
    {
        if (j < A)
        {
           fout << "0";
           j++;
        }
        else 
        {
            fout << "1";
            j = 0;     
        }
    }
    fout.close();
    
    return 0;
}