Submission #342478
Source Code Expand
#include<iostream>
#include<algorithm>
using namespace std;
#define rep(i,a,b) for(auto (i)=(a);(i)<(b);(i)++)
#define rev(i,a,b) for(auto (i)=(b)-1;(i)>=(a);(i)--)
#define MOD 10007
#define M 3
int a[32][2*M-1] = {0,1,0,0,0};
//a(0)からa(2*m-2)の形のa(n)をa(0)からa(m-1)の形に直す
void form(int* n){
rev(i, M, 2 * M - 1){
rep(j, 1, M + 1)
n[i - j] = (n[i - j] + n[i]) % MOD;
n[i] = 0;
}
}
void print(int *result){
rep(j, 0, 3){
printf("%d ", result[j]);
}
cout << endl;
}
void add(int *l, int *r, int *ans){
//print(l); print(r);
rep(i, 0, 2 * M - 1){
ans[i] = 0;
}
rep(i,0,M)
rep(j, 0, M){
ans[i + j] = (ans[i + j] + (l[i] * r[j]) % MOD) % MOD;
}
form(ans);
//print(ans);
}
//a(2^n)を求める
void init(){
//初期化
rep(n, 0, 32){
//a(2^n)の計算
add(a[n], a[n], a[n + 1]);
}
}
int calc(int n){
int result[5] = { 1 };
int tmp[5] = { 1 };
rep(i, 0, 30){
if (1&(n >> i)){
add(tmp, a[i], result);
rep(j, 0, M)tmp[j] = result[j];
}
}
return(result[2]);
}
int main(void){
int n;
cin >> n;
init();
cout << calc(n-1) << endl;
}
Submission Info
Submission Time |
|
Task |
B - トリボナッチ数列 |
User |
btk15049 |
Language |
C++11 (GCC 4.8.1) |
Score |
100 |
Code Size |
1182 Byte |
Status |
AC |
Exec Time |
31 ms |
Memory |
1020 KB |
Judge Result
Set Name |
All |
Score / Max Score |
100 / 100 |
Status |
|
Set Name |
Test Cases |
All |
test_1.txt, test_1000000.txt, test_1002.txt, test_104.txt, test_107843.txt, test_10980.txt, test_1212.txt, test_1238.txt, test_13194.txt, test_14.txt, test_16.txt, test_2.txt, test_210782.txt, test_21694.txt, test_243.txt, test_24916.txt, test_278.txt, test_3.txt, test_31.txt, test_32.txt, test_42.txt, test_5555.txt, test_567914.txt, test_61868.txt, test_765671.txt, test_8195.txt, test_8353.txt, test_9.txt, test_9625.txt, test_97.txt, test_998.txt, test_999998.txt, test_999999.txt |
Case Name |
Status |
Exec Time |
Memory |
sample_01.txt |
AC |
28 ms |
1008 KB |
sample_02.txt |
AC |
26 ms |
888 KB |
sample_03.txt |
AC |
27 ms |
924 KB |
test_1.txt |
AC |
25 ms |
924 KB |
test_1000000.txt |
AC |
27 ms |
876 KB |
test_1002.txt |
AC |
27 ms |
924 KB |
test_104.txt |
AC |
28 ms |
864 KB |
test_107843.txt |
AC |
28 ms |
864 KB |
test_10980.txt |
AC |
28 ms |
884 KB |
test_1212.txt |
AC |
26 ms |
920 KB |
test_1238.txt |
AC |
27 ms |
868 KB |
test_13194.txt |
AC |
27 ms |
920 KB |
test_14.txt |
AC |
27 ms |
920 KB |
test_16.txt |
AC |
26 ms |
860 KB |
test_2.txt |
AC |
25 ms |
920 KB |
test_210782.txt |
AC |
27 ms |
864 KB |
test_21694.txt |
AC |
25 ms |
920 KB |
test_243.txt |
AC |
26 ms |
924 KB |
test_24916.txt |
AC |
26 ms |
920 KB |
test_278.txt |
AC |
28 ms |
1004 KB |
test_3.txt |
AC |
26 ms |
920 KB |
test_31.txt |
AC |
27 ms |
1020 KB |
test_32.txt |
AC |
31 ms |
916 KB |
test_42.txt |
AC |
26 ms |
880 KB |
test_5555.txt |
AC |
27 ms |
920 KB |
test_567914.txt |
AC |
27 ms |
920 KB |
test_61868.txt |
AC |
27 ms |
872 KB |
test_765671.txt |
AC |
27 ms |
920 KB |
test_8195.txt |
AC |
28 ms |
880 KB |
test_8353.txt |
AC |
25 ms |
924 KB |
test_9.txt |
AC |
27 ms |
872 KB |
test_9625.txt |
AC |
26 ms |
924 KB |
test_97.txt |
AC |
27 ms |
916 KB |
test_998.txt |
AC |
27 ms |
920 KB |
test_999998.txt |
AC |
27 ms |
944 KB |
test_999999.txt |
AC |
28 ms |
924 KB |