Pagini recente » Cod sursa (job #622391) | Cod sursa (job #1331225) | Cod sursa (job #982767) | Cod sursa (job #2236606) | Cod sursa (job #1453879)
#include <fstream>
#include <vector>
#include <algorithm>
#define MOD 9901
#define DIM 30
using namespace std;
ifstream fin("pod.in");
ofstream fout("pod.out");
int A[DIM][DIM],B[DIM][DIM],C[DIM][DIM],b[DIM][DIM],D[DIM][DIM];
int v[1002];
int st;
int N,M,K;
void multi(int a[][DIM],int b[][DIM],int c[][DIM],int d){
for(int i=1;i<=d;i++)
for(int j=1;j<=d;j++){
c[i][j]=0;
for(int k=1;k<=d;k++)
c[i][j]=(c[i][j] + 1LL * a[i][k] * b[k][j]) % MOD;
}
}
void copy(int a[][DIM],int b[][DIM],int d){
for(int i=1;i<=d;i++)
for(int j=1;j<=d;j++)
a[i][j]=b[i][j];
}
void pow(int a[][DIM],int b[][DIM],int P){
for(int i=1;i<=K;i++)
for(int j=1;j<=K;j++){
b[i][j]=B[i][j];
C[i][j]=0;
if(i==j)
C[i][j]=1;
}
while(P){
if(P&1){
multi(C,b,D,K);
copy(C,D,K);
}
multi(b,b,D,K);
copy(b,D,K);
P/=2;
}
multi(A,C,D,K);
copy(A,D,K);
}
void afis(int a[][DIM],int d){
for(int i=1;i<=d;i++){
for(int j=1;j<=d;j++)
fout<<a[i][j]<<" ";
fout<<"\n";
}
}
int main(){
fin>>N>>M>>K;
for(int i=1;i<=K;i++)
B[i][K]=1;
for(int i=1;i<K;i++)
B[i+1][i]=1;
for(int i=1;i<=M;i++)
fin>>v[i];
A[1][K]=1;
sort(v+1,v+M+1);
v[++M]=N;
for(int i=1;i<=M;i++){
int x=v[i]-v[i-1];
pow(A,b,x);
if(i < M)
A[1][K]=0;
}
fout<<A[1][K]<<"\n";
}