Pagini recente » Cod sursa (job #1098320) | Cod sursa (job #927428) | Cod sursa (job #2260248) | Cod sursa (job #2662170) | Cod sursa (job #2038169)
#include <bits/stdc++.h>
#define Mmax 1001
#define Kmax 21
#define MOD 9901
using namespace std;
ifstream f("pod.in");
ofstream g("pod.out");
int good[Mmax];
int M[Kmax][Kmax];
int r[Mmax][Mmax];
int v[Mmax];
int c[Mmax][Mmax];
int ans[Mmax];
#define a M
int main()
{
int n,m,K,i,j,k;
f>>n>>m>>K;
for(i=1;i<=n;i++)
f>>good[i];
sort(good+1,good+m+1);
for(i=2;i<=K;i++)
M[i][i-1]=1;
M[1][K]=M[K][K]=1;
int poz=1;
bool ok=true;
for(i=1;i<K;i++)
{
r[i][i]=1;
if(i==good[poz])
{
++poz;
ok=false;
}
if(ok) v[i]=1;
}
v[K]=v[K-1]+1;
r[K][K]=1;
int N=n-K-1;
while(N)
{
if(N&1)
{
for(i=1;i<=K;i++)
for(j=1;j<=K;j++)
{
c[i][j]=0;
for(k=1;k<=K;k++)
c[i][j]=(c[i][j]+(r[i][k]*a[k][j])%MOD)%MOD;
}
for(i=1;i<=K;i++)
for(j=1;j<=K;j++)
r[i][j]=c[i][j];
}
N>>=1;
for(i=1;i<=K;i++)
for(j=1;j<=K;j++)
{
c[i][j]=0;
for(k=1;k<=K;k++)
c[i][j]=(c[i][j]+(a[i][k]*a[k][j])%MOD)%MOD;
}
for(i=1;i<=K;i++)
for(j=1;j<=K;j++)
a[i][j]=c[i][j];
}
for(i=1;i<=K;i++)
for(j=1;j<=K;j++)
ans[i]=(ans[i]+(v[i]*r[j][i])%MOD)%MOD;
g<<ans[K];
return 0;
}