All pastes #768265 Raw Edit

Etwas

public text v1 · immutable
·published 2007-11-10 13:29 UTC
rendered paste body
#include<stdio.h>
#include<stdlib.h>
#include <string.h>

long long int field[70][70][110];
long long int doit(int, int);

int pows2[34];

int main(void)
{
        int testcases;
        int cnt = 1;
        int N, M;
        scanf("%d", &testcases);
        pows2[0] = 1;
        for(int i = 1; i < 32; ++i)
        {
                pows2[i] = pows2[i-1] * 2;
        }
        while(testcases--)
        {
                scanf("%d%d", &N, &M);
                printf("Case %d: ", cnt);
                cnt++;
                printf("%lld\n", doit(N, M));
        }
        return 0;
}

long long int doit(int N, int M)
{
        memset(field, 0, sizeof(long long int) * 70 * 70 * 110);        
        field[0][0][0] = 1;

        for(int i = 1; i < N; ++i)
        {
                for(int j = 0; j < N; ++j)
                {
                        for(int k = 0; k < M; ++k)
                        {       
                                if(j <= i-1)
                                {
                                    field[i][j][k] += field[i-1][j][k];
                                }
                                if(j >= 1)
                                {
                                    field[i][j][k] += field[i-1][j-1][((k - pows2[i-1] % M) + M) % M];                                     
                                }
                             //   printf("i=%d j=%d k=%d   %d\n", i, j, k, field[i][j][k]);
                         }
                }
        }
       // printf("pow %d\n", pows2[N]);
        //printf("looking up at %d %d %d\n", N-1, (N/2) - 1, (M - pows2[N] % M) % M); 
        return field[N-1][(N/2) - 1][((M - pows2[N-1] % M) + M) % M];
}