Pagini recente » Cod sursa (job #2822430) | Cod sursa (job #1444741) | Cod sursa (job #3215636) | Cod sursa (job #1111933) | Cod sursa (job #1899152)
#include <fstream>
#include <string.h>
#include <algorithm>
#define Kdim 21
#define Mdim 1002
#define MOD 9901
using namespace std;
ifstream fin("pod.in");
ofstream fout("pod.out");
int M[Kdim][Kdim],A[Kdim][Kdim],D[Kdim],V[Mdim],C[Kdim][Kdim];
void create_matrix(int n)
{
int i;
for(i=1;i<n;i++)
M[i+1][i] = 1;
M[1][n] = M[n][n] = 1;
}
void inmultire(int A1[Kdim][Kdim],int B1[Kdim][Kdim],int n)
{
int i,j,k;
memset(C,0,sizeof C);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
for(k=1;k<=n;k++)
C[i][j] = (C[i][j]+A1[i][k]*B1[k][j])%MOD;
}
}
}
void lgput(int p,int k)
{
int i,j,B[Kdim][Kdim];
memset(A,0,sizeof A);
for(i=1;i<=k;i++)
A[i][i] = 1;
memcpy(B,M,sizeof M);
for(i=0; (1<<i)<= p;i++)
{
if((1<<i) & p)
{
inmultire(A,B,k);
memcpy(A,C,sizeof A);
}
inmultire(B,B,k);
memcpy(B,C,sizeof(C));
}
}
int main()
{
int n,m,k,i,ind=0,p,j,t,AUX[Kdim];
fin>>n>>m>>k;
for(i=1;i<=m;i++)
{
fin>>V[i];
}
V[++m] = n+1;
D[k] = 1;
create_matrix(k);
for(i=1;i<=m;i++)
{
p = V[i]-V[i-1];
lgput(p,k);
memset(AUX,0,sizeof AUX);
for(j=1;j<=k;j++)
for(t = 1;t<=k;t++)
AUX[j] = (AUX[j]+D[t]*A[t][j])%MOD;
memcpy(D,AUX,sizeof D);
D[k] = 0;
}
fout<<D[k-1];
return 0;
}