hdu1757
제목: x<10시 f(x)= x. x>=10, f(x)=a0*f(x-1)+a1*f(x-2)+a2*f(x-3)+...+a9*f(x-10), f(k)%m 구하기
코드:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct node{
long long m[10][10];
};
long long m;
node P={0,0,0,0,0,0,0,0,0,0,
1,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,1,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,
0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,0,1,0}; //
node I={1,0,0,0,0,0,0,0,0,0,
0,1,0,0,0,0,0,0,0,0,
0,0,1,0,0,0,0,0,0,0,
0,0,0,1,0,0,0,0,0,0,
0,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,1,0,0,0,0,
0,0,0,0,0,0,1,0,0,0,
0,0,0,0,0,0,0,1,0,0,
0,0,0,0,0,0,0,0,1,0,
0,0,0,0,0,0,0,0,0,1,};
node mul(node a,node b){
int i,j,k;
node c;
for(i=0;i<10;i++)
for(j=0;j<10;j++){
c.m[i][j]=0;
for(k=0;k<10;k++)
c.m[i][j]+=(a.m[i][k]*b.m[k][j])%m;
c.m[i][j]%=m;
}
return c;
}
node quickmod(long long n){
node a,b;
a=P;b=I;
while(n){
if(n&1)
b=mul(b,a);
n/=2;
a=mul(a,a);
}
return b;
} //
long long a[20];
int main(){
long long k,i,sum;
node temp;
while(cin>>k>>m){
for(i=0;i<10;i++)
cin>>a[i];
if(k<10){
cout<<k%m<<endl;
continue;
} // 10
for(i=0;i<10;i++)
P.m[0][i]=a[i];
temp=quickmod(k-9);
sum=0;
for(i=0;i<10;i++)
sum+=(temp.m[0][i]*(9-i))%m;
sum%=m;
cout<<sum<<endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.