Pagini recente » Cod sursa (job #1500092) | Cod sursa (job #183976) | Cod sursa (job #2264740) | Cod sursa (job #415944) | Cod sursa (job #2022195)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int kmax=25;
const int mod=9901;
int rez[kmax][kmax],p2[kmax][kmax],aux[kmax][kmax];
int v[1005];
int n,i,j,k,cnt,m,t;
void mems(int A[][25])
{
for(int i=0;i<k;i++)
for(int j=0;j<k;j++)
A[i][j]=0;
}
void memc(int A[][25],int B[][25])
{
for(int i=0;i<k;i++)
for(int j=0;j<k;j++)
A[i][j]=B[i][j];
}
void mult(int A[][25],int B[][25],int C[][25])
{
for(int ind=0;ind<k;ind++)
for(int i=0;i<k;i++)
for(int j=0;j<k;j++)
C[i][j]=(C[i][j]+A[i][ind]*B[ind][j])%mod;
}
void put(int N)
{
if(N<0)
return;
for(int p=0;p<30;p++)
{
if(((1<<p)&N))
{
mems(aux);
mult(rez,p2,aux);
memc(rez,aux);
}
mems(aux);
mult(p2,p2,aux);
memc(p2,aux);
}
}
int main()
{
ifstream f("pod.in");
ofstream g("pod.out");
f>>n>>m>>k;k++;
for(i=1;i<=m;i++)
{
f>>v[i];
}
sort(v+1,v+m+1);
v[m+1]=n;rez[0][0]=1;rez[0][k-1]=1;t=k;v[0]=1;
for(cnt=0;cnt<=m;cnt++)
{
for(i=0;i<k;i++)
for(j=0;j<k;j++)
p2[i][j]=0;
for(i=1;i<k;i++)
p2[i][i-1]=1;
p2[0][k-1]=1;if(k>1)p2[k-2][k-1]=1;
if(cnt>=1)
rez[0][0]=0;
put(v[cnt+1]-v[cnt]);
}
t=min(k-1,v[cnt]-v[cnt-1]);
g<<rez[0][0];
return 0;
}