Pagini recente » Cod sursa (job #2164156) | Cod sursa (job #1811884) | Cod sursa (job #918571) | Cod sursa (job #2287428) | Cod sursa (job #3217531)
#include <bits/stdc++.h>
#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
ifstream fin ("pod.in");
ofstream fout ("pod.out");
const int MMAX=1e3+5;
const int MOD=9901;
const int NMAX=25;
int init[NMAX][NMAX];
int mat[NMAX][NMAX];
int aux[NMAX][NMAX];
int auxy[NMAX];
int dp[NMAX];
int v[MMAX];
int k;
void multiply(int a[NMAX][NMAX],int b[NMAX][NMAX])
{
int x,i,j;
int aux2[k][k];
for(i=0;i<k;i++)
for(j=0;j<k;j++)
aux2[i][j]=0;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
for(x=0;x<k;x++)
aux2[i][j]=(aux2[i][j]+a[i][x]*b[x][j])%MOD;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
a[i][j]=aux2[i][j];
}
void lgput(int b)
{
int i;
for(i=0;(1<<i)<=b;i++)
{
if(b & (1<<i))
multiply(mat,aux);
multiply(aux,aux);
}
}
signed main()
{
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
int n,m,i,j,l;
fin>>n>>m>>k;
for(i=1;i<=m;i++)
fin>>v[i];
sort(v+1,v+m+1);
v[++m]=n;
dp[k-1]=1;
for(i=1;i<=m;i++)
{
for(j=0;j<k;j++)
{
for(l=0;l<k;l++)
{
if(j==l)
mat[j][l]=1;
else
mat[j][l]=0;
if(l==k-1)
{
if(j==0)
aux[j][l]=1;
else if(j==k-1)
aux[j][l]=1;
else
aux[j][l]=0;
}
else
{
if(j==l+1)
aux[j][l]=1;
else
aux[j][l]=0;
}
}
auxy[j]=0;
}
lgput(v[i]-v[i-1]);
for(j=0;j<k;j++)
{
for(l=0;l<k;l++)
{
auxy[j]+=1LL*dp[l]*mat[l][j];
auxy[j]%=MOD;
}
}
for(j=0;j<k;j++)
dp[j]=auxy[j];
if(i==m)
{
fout<<dp[k-1];
fin.close();
fout.close();
return 0;
}
else
dp[k-1]=0;
}
fout<<0;
fin.close();
fout.close();
return 0;
}