Submission #103873


Source Code Expand

#include <algorithm>
#include <cassert>
#include <cstring>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <tuple>
#include <vector>
#include <unordered_set>
#include <unordered_map>
using namespace std;

#define REP2(i, m, n) for(int i = (int)(m); i < (int)(n); i++)
#define REP(i, n) REP2(i, 0, n)
#define ALL(c) (c).begin(), (c).end()
#define PB(e) push_back(e)
#define FOREACH(i, c) for(auto i = (c).begin(); i != (c).end(); ++i)
#define MP(a, b) make_pair(a, b)
#define BIT(n, m) (((n) >> (m)) & 1)

typedef complex<double> P;
typedef long long ll;

const ll     mod = 1000 * 1000 * 1000 + 7;
const double EPS = 1e-10;

vector<ll> poly_mul(const vector<ll> &x,
                    const vector<ll> &y,
                    const vector<ll> &coef, ll mod)
{
  assert(x.size() == y.size());
  
  int n = x.size() - 1;
  vector<ll> ret(n + 1, 0);
  vector<ll> q  (2 * n, 0);
  
  for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
      (q[i+j] += x[i] * y[j]) %= mod;
    }
  }
  
  for(int i = 2 * n - 1; i >= n; i--){
    for(int j = 0; j < n; j++){
      (q[i-n+j] += q[i] * coef[j]) %= mod;
    }
  }

  ret[n] = x[n];
  
  for(int i = 0; i < n; i++){
    ret[i] = q[i];
    (ret[n] += y[n] * x[i]) %= mod;
  }
  
  return ret;
}

vector<ll> poly_pow(const vector<ll> &coef, ll N, ll mod){
  vector<ll> p(coef.size(), 0); 
  vector<ll> c(coef.size(), 0);

  c[0] = 1;
  p[1] = 1;
  
  while(N){
    if(N & 1) c = poly_mul(c, p, coef, mod);
    p = poly_mul(p, p, coef, mod);
    N >>= 1;
  }
  return c;
}

int main(){
  int K, N;
  cin >> K >> N;
  
  vector<ll> coef(K + 1, 1); coef[K] = 0;
  coef = poly_pow(coef, N - 1, mod);

  cout << accumulate(ALL(coef), 0LL) % mod<< endl;
  
  return 0;
}

Submission Info

Submission Time
Task T - フィボナッチ
User flowlight
Language C++11 (GCC 4.8.1)
Score 8
Code Size 2059 Byte
Status AC
Exec Time 1609 ms
Memory 932 KB

Judge Result

Set Name All
Score / Max Score 8 / 8
Status
AC × 7
Set Name Test Cases
All 00, 01, 02, 03, 04, 90, 91
Case Name Status Exec Time Memory
00 AC 1609 ms 932 KB
01 AC 830 ms 800 KB
02 AC 1433 ms 800 KB
03 AC 250 ms 924 KB
04 AC 560 ms 928 KB
90 AC 21 ms 804 KB
91 AC 21 ms 792 KB