记录编号 414923 评测结果 AAAAAAAAAA
题目名称 [UVa 10870] 递推关系 最终得分 100
用户昵称 Gravataryymxw 是否通过 通过
代码语言 C++ 运行时间 0.197 s
提交时间 2017-06-15 11:44:57 内存使用 0.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
using namespace std;
inline long long read()
{
  long long x=0,f=1;
  char ch=getchar();
  while(ch<'0'||ch>'9')
  {
    if(ch=='-')
      f=-1;
    ch=getchar();
  }
  while(ch>='0'&&ch<='9')
  {
    x=(x<<1)+(x<<3)+ch-'0';
    ch=getchar();
  }
  return x*f;
}
long long d,n,m;
long long b[20],f[20];
struct ying
{
  long long a[20][20];
  ying()
  {
    memset(a,0,sizeof(a));
  }
};
ying mul(ying &aa,ying &b,int mod)
{
  ying c;
  for(int i=0;i<15;++i)
    for(int j=0;j<15;++j)
    {
      c.a[i][j]=0;
      for(int k=0;k<15;++k)
        c.a[i][j]+=(aa.a[i][k]*b.a[k][j]);
      c.a[i][j]%=mod;
    }
  return c;
}
ying init()
{
  ying res;
  for(int i=0;i<15;++i)
    for(int j=0;j<15;++j)
      res.a[i][j]=(i==j);
  return res;
}
ying ks(ying aa,int k,int mod)
{
  ying res=init();
  while(k)
  {
    if(k&1)
      res=mul(res,aa,mod);
    k>>=1;
    aa=mul(aa,aa,mod);
  }
  return res;
}
int haha()
{
  freopen("recurrences.in","r",stdin);
  freopen("recurrences.out","w",stdout);
  while(1)
  {
    d=read();n=read();m=read();
    ying A,B;
    if(d==0&&n==0&&m==0)
      break;
    for(int i=0;i<d;++i)
      b[i]=read();
    for(int i=0;i<d;++i)
      f[i]=read();
    for(int i=0;i<d;++i)
      A.a[0][i]=b[i];
    for(int i=1;i<d;++i)
      A.a[i][i-1]=1;
    for(int i=0;i<d;++i)
      B.a[d-i-1][0]=f[i];
    ying res=ks(A,n-d,m);
    res=mul(res,B,m);
    printf("%d\n",res.a[0][0]);
  }
  //system("pause");
  return 0;
}
int sb=haha();
int main()
{;}