Submission #3974048
Source Code Expand
#include<stdio.h>
#include<stdlib.h>
typedef long long int int64;
const int mod=1000000007;
int *tmp=NULL;
void mul(int *c,int *a,int *b,int *d,int k){
int i,j;
for(i=0;i<2*k-1;i++) tmp[i]=0;
for(i=0;i<k;i++){
for(j=0;j<k;j++){
tmp[i+j]=(tmp[i+j]+(int64)a[i]*b[j])%mod;
}
}
for(i=2*k-1;i>=k;i--){
for(j=0;j<k;j++){
tmp[i-(k-j)]=(tmp[i-(k-j)]+(int64)d[j]*tmp[i])%mod;
}
}
for(i=0;i<k;i++) c[i]=tmp[i];
}
void run(void){
int k,n;
scanf("%d%d",&k,&n);
int *t=(int *)calloc(k,sizeof(int));
t[0]=1;
int *s=(int *)calloc(k,sizeof(int));
s[1]=1;
tmp=(int *)calloc(2*k-1,sizeof(int));
int *d=(int *)calloc(k,sizeof(int));
int i;
for(i=0;i<k;i++) d[i]=1;
n--;
while(n){
if(n&1) mul(t,t,s,d,k);
mul(s,s,s,d,k);
n>>=1;
}
int ans=0;
for(i=0;i<k;i++) ans=(ans+t[i])%mod;
printf("%d\n",ans);
}
int main(void){
run();
return 0;
}
Submission Info
Submission Time
2019-01-11 01:31:18+0900
Task
T - フィボナッチ
User
sansen
Language
C (GCC 5.4.1)
Score
8
Code Size
960 Byte
Status
AC
Exec Time
192 ms
Memory
128 KB
Compile Error
./Main.c: In function ‘run’:
./Main.c:27:3: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d",&k,&n);
^
Judge Result
Set Name
All
Score / Max Score
8 / 8
Status
Set Name
Test Cases
All
00, 01, 02, 03, 04, 90, 91
Case Name
Status
Exec Time
Memory
00
AC
192 ms
128 KB
01
AC
99 ms
128 KB
02
AC
172 ms
128 KB
03
AC
29 ms
128 KB
04
AC
61 ms
128 KB
90
AC
1 ms
128 KB
91
AC
1 ms
128 KB