Description
Lele now is thinking about a simple function f(x).
If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .
Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m.
If x < 10 f(x) = x.
If x >= 10 f(x) = a0 * f(x-1) + a1 * f(x-2) + a2 * f(x-3) + …… + a9 * f(x-10);
And ai(0<=i<=9) can only be 0 or 1 .
Now, I will give a0 ~ a9 and two positive integers k and m ,and could you help Lele to caculate f(k)%m.
Input
The problem contains mutiple test cases.Please process to the end of file.
In each case, there will be two lines.
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9.
In each case, there will be two lines.
In the first line , there are two positive integers k and m. ( k<2*10^9 , m < 10^5 )
In the second line , there are ten integers represent a0 ~ a9.
Output
For each case, output f(k) % m in one line.
Sample Input
10 9999 1 1 1 1 1 1 1 1 1 1 20 500 1 0 1 0 1 0 1 0 1 0
Sample Output
45 104
描述
乐乐现在正在考虑一个简单的函数f(x)。
如果x < 10 f(x)= x。
如果x > = 10 f(x)= a0 * f(x - 1)+ a1 * f(2)+ a2 * f(x 3)+……+ a9 * f(10倍);
和人工智能(0 < =我< = 9)只能是0或1。
现在,我要给a0 ~ a9和两个正整数k和米,和你能帮乐乐各行各业f(k)%。
如果x < 10 f(x)= x。
如果x > = 10 f(x)= a0 * f(x - 1)+ a1 * f(2)+ a2 * f(x 3)+……+ a9 * f(10倍);
和人工智能(0 < =我< = 9)只能是0或1。
现在,我要给a0 ~ a9和两个正整数k和米,和你能帮乐乐各行各业f(k)%。
输入
这个问题包含多种测试用例。 请处理的文件。
在每种情况下,将会有两行。
在第一行中,有两个正整数k和m。(k < 2 * 10 ^ 9,m < 10 ^ 5)
在第二行,有十个整数代表a0 ~ a9。
在每种情况下,将会有两行。
在第一行中,有两个正整数k和m。(k < 2 * 10 ^ 9,m < 10 ^ 5)
在第二行,有十个整数代表a0 ~ a9。
输出
每种情况下,输出f(k)% m在一行。
样例输入
9999 1 1 1 1 1 1 1 1 1 1 500 1 0 1 0 1 0 1 0 1 0
样例输出
45 104年
这题很简单,不会做的都是SB;
#include<cstdio>
#include<cstring>
using namespace std;
long long a[20],m,n,b[20];
void f()
{
long long s1[14][14],s2[14][14],s3[14][14],sum=0;
long long i,j,k;
for (i=0;i<=9;i++)
for (j=0;j<=9;j++)
{
if (j==9)
{
s1[i][9]=a[9-i];
s2[i][9]=a[9-i];
}
else if (i==j+1)
{
s1[i][j]=1;
s2[i][j]=1;
}
else
{
s1[i][j]=0;
s2[i][j]=0;
}
}
m-=10;
while (m)
{
if (m&1)
{
memset(s3,0,sizeof(s3));
for (i=0;i<=9;i++)
for (j=0;j<=9;j++)
for (k=0;k<=9;k++)
s3[i][j]+=(s1[i][k]*s2[k][j])%n;
for (i=0;i<=9;i++)
for (j=0;j<=9;j++)
s2[i][j]=s3[i][j];
}
memset(s3,0,sizeof(s3));
for (i=0;i<=9;i++)
for (j=0;j<=9;j++)
for (k=0;k<=9;k++)
s3