Cod sursa(job #2022195)

Utilizator Bodo171Bogdan Pop Bodo171 Data 15 septembrie 2017 22:06:26
Problema Pod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#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;
}