Cod sursa(job #1832554)

Utilizator NineshadowCarapcea Antonio Nineshadow Data 20 decembrie 2016 12:46:19
Problema Pod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("pod.in");
ofstream out("pod.out");
const int mod=666013;
int n,m,k,l[1000];
struct matrix
{
    int v[20][20],dim;
    matrix(int dim):dim(dim)
    {
        memset(v,0,sizeof(v));
    }
    void unit()
    {
        for(int i=0; i<dim; i++) v[i][i]=1;
    } matrix operator *(matrix a)
    {
        matrix rez(dim);
        for(int i=0; i<dim; ++i)for(int j=0; j<dim; ++j)for(int y=0; y<dim; ++y)rez.v[i][j]=(rez.v[i][j]+1LL*v[i][y]*a.v[y][j])%mod;
        return rez;
    }
};
matrix pow(matrix a,int power)
{
    matrix p(a.dim);
    p.unit();
    for(int i=1; i<=power; i<<=1)
    {
        if(power&i) p=p*a;
        a=a*a;
    }
    return p;
}
int main()
{
    in>>n>>m>>k;
    for(int i=0; i<m; ++i)
    {
        int temp;
        in>>temp;
        l[temp-1]=1;
    }
    matrix a(k);
    a.v[0][0]=1;
    a.v[0][k-1]=1;
    for(int i=0; i<k-1; ++i)
        a.v[i+1][i]=1;
    matrix x(k);
    for(int i=0; i<k; ++i)
        x.v[0][i]=(l[i]==1?0:1);
    matrix c(k);
    c=pow(a,n-2*k-2);
    out<<c.v[0][k-1];




    }