Submission #3558527


Source Code Expand

#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
using vi = vector<i64>;
using vvi = vector<vi>;
constexpr i64 MOD = 1e18;

template<int n>
struct mat {
    vvi d;

    mat() {
        d = vvi(n, vi(n));
    }
    
    mat(initializer_list<initializer_list<i64>> m) {
        for (auto& a: m) {
            vi row(a.begin(), a.end());
            d.emplace_back(row);
        }
        assert(n == d.size());
        assert(n == d.front().size());
    };
    
    mat operator+(const mat& rhs) {
        mat ret;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                ret.d[i][j] = d[i][j] + rhs.d[i][j];
                ret.d[i][j] %= MOD;
                ret.d[i][j] += MOD;
                ret.d[i][j] %= MOD;
            }
        }
        return ret;
    }
    
    mat operator-(const mat& rhs) {
        mat ret;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                ret.d[i][j] = d[i][j] - rhs.d[i][j];
                ret.d[i][j] %= MOD;
                ret.d[i][j] += MOD;
                ret.d[i][j] %= MOD;
            }
        }
        return ret;
    }
    
    mat operator*(const mat& rhs) {
        mat ret;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < n; k++) {
                    ret.d[i][j] += d[i][k] * rhs.d[k][j];
                    ret.d[i][j] %= MOD;
                    ret.d[i][j] += MOD;
                    ret.d[i][j] %= MOD;
                }
            }
        }
        return ret;
    }
    
    mat operator*(const i64 k) {
        mat ret;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                ret.d[i][j] = d[i][j] * k;
                ret.d[i][j] %= MOD;
                ret.d[i][j] += MOD;
                ret.d[i][j] %= MOD;
            }
        }
        return ret;
    }
    
    static mat eye() {
        mat ret;
        for (int i = 0; i < n; i++) {
            ret.d[i][i] = 1;
        }
        return ret;
    }
};

template<int k>
mat<k> pow(mat<k>& a, i64 n) {
    if (n == 0) {
        return mat<k>::eye();
    }
    if (n % 2 == 0) {
        mat<k> t = pow(a, n / 2);
        return t * t;
    }
    return a * pow(a, n - 1);
}

i64 fib(i64 n) {
    if (n <= 1) return n;
    mat<2> f{{1, 1}, {1, 0}};
    mat<2> res = pow(f, n - 2);
    return (res.d[0][0] + res.d[0][1]) % MOD;
}

int main() {
    i64 n;
    cin >> n;

    vi fibs;
    for (int i = 0;; i++) {
        i64 f = fib(i);
        if (f > 1e10) {
            break;
        }
        fibs.push_back(f);
    }

    int cnt = 0;
    while (n) {
        if (upper_bound(fibs.begin(), fibs.end(), n) - lower_bound(fibs.begin(), fibs.end(), n)) {
            cnt++;
            break;
        } else {
            int k = lower_bound(fibs.begin(), fibs.end(), n) - fibs.begin();
            k--;
            n -= fibs[k];
            cnt++;
        }
    }
    cout << cnt << endl;
}

Submission Info

Submission Time
Task A - ぶんたん
User xuzijian629
Language C++14 (GCC 5.4.1)
Score 100
Code Size 3154 Byte
Status AC
Exec Time 1 ms
Memory 256 KB

Judge Result

Set Name small large
Score / Max Score 50 / 50 50 / 50
Status
AC × 70
AC × 129
Set Name Test Cases
small small/00_sample1, small/00_sample2, small/10_small_randomcase64, small/10_small_randomcase65, small/10_small_randomcase66, small/10_small_randomcase67, small/10_small_randomcase68, small/10_small_randomcase69, small/10_small_randomcase70, small/10_small_randomcase71, small/10_small_randomcase72, small/10_small_randomcase73, small/10_small_randomcase74, small/10_small_randomcase75, small/10_small_randomcase76, small/10_small_randomcase77, small/10_small_randomcase78, small/10_small_randomcase79, small/10_small_randomcase80, small/10_small_randomcase81, small/10_small_randomcase82, small/10_small_randomcase83, small/10_small_testcase00, small/10_small_testcase01, small/10_small_testcase02, small/10_small_testcase03, small/10_small_testcase04, small/10_small_testcase05, small/10_small_testcase06, small/10_small_testcase07, small/10_small_testcase08, small/10_small_testcase11, small/10_small_testcase12, small/10_small_testcase13, small/10_small_testcase14, small/10_small_testcase15, small/10_small_testcase16, small/10_small_testcase17, small/10_small_testcase18, small/10_small_testcase19, small/10_small_testcase20, small/10_small_testcase23, small/10_small_testcase24, small/10_small_testcase26, small/10_small_testcase28, small/10_small_testcase29, small/10_small_testcase31, small/10_small_testcase34, small/10_small_testcase36, small/10_small_testcase38, small/10_small_testcase39, small/10_small_testcase41, small/10_small_testcase42, small/10_small_testcase43, small/10_small_testcase44, small/10_small_testcase45, small/10_small_testcase46, small/10_small_testcase47, small/10_small_testcase48, small/10_small_testcase50, small/10_small_testcase51, small/10_small_testcase52, small/10_small_testcase53, small/10_small_testcase54, small/10_small_testcase56, small/10_small_testcase58, small/10_small_testcase59, small/10_small_testcase60, small/10_small_testcase61, small/10_small_testcase62
large small/00_sample1, small/00_sample2, small/10_small_randomcase64, small/10_small_randomcase65, small/10_small_randomcase66, small/10_small_randomcase67, small/10_small_randomcase68, small/10_small_randomcase69, small/10_small_randomcase70, small/10_small_randomcase71, small/10_small_randomcase72, small/10_small_randomcase73, small/10_small_randomcase74, small/10_small_randomcase75, small/10_small_randomcase76, small/10_small_randomcase77, small/10_small_randomcase78, small/10_small_randomcase79, small/10_small_randomcase80, small/10_small_randomcase81, small/10_small_randomcase82, small/10_small_randomcase83, small/10_small_testcase00, small/10_small_testcase01, small/10_small_testcase02, small/10_small_testcase03, small/10_small_testcase04, small/10_small_testcase05, small/10_small_testcase06, small/10_small_testcase07, small/10_small_testcase08, small/10_small_testcase11, small/10_small_testcase12, small/10_small_testcase13, small/10_small_testcase14, small/10_small_testcase15, small/10_small_testcase16, small/10_small_testcase17, small/10_small_testcase18, small/10_small_testcase19, small/10_small_testcase20, small/10_small_testcase23, small/10_small_testcase24, small/10_small_testcase26, small/10_small_testcase28, small/10_small_testcase29, small/10_small_testcase31, small/10_small_testcase34, small/10_small_testcase36, small/10_small_testcase38, small/10_small_testcase39, small/10_small_testcase41, small/10_small_testcase42, small/10_small_testcase43, small/10_small_testcase44, small/10_small_testcase45, small/10_small_testcase46, small/10_small_testcase47, small/10_small_testcase48, small/10_small_testcase50, small/10_small_testcase51, small/10_small_testcase52, small/10_small_testcase53, small/10_small_testcase54, small/10_small_testcase56, small/10_small_testcase58, small/10_small_testcase59, small/10_small_testcase60, small/10_small_testcase61, small/10_small_testcase62, large/20_large_randomcase128, large/20_large_randomcase129, large/20_large_randomcase130, large/20_large_randomcase131, large/20_large_randomcase132, large/20_large_randomcase133, large/20_large_randomcase134, large/20_large_randomcase135, large/20_large_randomcase136, large/20_large_randomcase137, large/20_large_randomcase138, large/20_large_randomcase139, large/20_large_randomcase140, large/20_large_randomcase141, large/20_large_randomcase142, large/20_large_randomcase143, large/20_large_randomcase144, large/20_large_randomcase145, large/20_large_randomcase146, large/20_large_randomcase147, large/20_large_testcase100, large/20_large_testcase101, large/20_large_testcase102, large/20_large_testcase103, large/20_large_testcase104, large/20_large_testcase105, large/20_large_testcase106, large/20_large_testcase107, large/20_large_testcase108, large/20_large_testcase109, large/20_large_testcase110, large/20_large_testcase111, large/20_large_testcase112, large/20_large_testcase113, large/20_large_testcase114, large/20_large_testcase115, large/20_large_testcase117, large/20_large_testcase118, large/20_large_testcase119, large/20_large_testcase120, large/20_large_testcase121, large/20_large_testcase122, large/20_large_testcase123, large/20_large_testcase124, large/20_large_testcase125, large/20_large_testcase126, large/20_large_testcase127, large/20_large_testcase84, large/20_large_testcase85, large/20_large_testcase86, large/20_large_testcase88, large/20_large_testcase89, large/20_large_testcase90, large/20_large_testcase91, large/20_large_testcase93, large/20_large_testcase95, large/20_large_testcase97, large/20_large_testcase98, large/20_sample3
Case Name Status Exec Time Memory
large/20_large_randomcase128 AC 1 ms 256 KB
large/20_large_randomcase129 AC 1 ms 256 KB
large/20_large_randomcase130 AC 1 ms 256 KB
large/20_large_randomcase131 AC 1 ms 256 KB
large/20_large_randomcase132 AC 1 ms 256 KB
large/20_large_randomcase133 AC 1 ms 256 KB
large/20_large_randomcase134 AC 1 ms 256 KB
large/20_large_randomcase135 AC 1 ms 256 KB
large/20_large_randomcase136 AC 1 ms 256 KB
large/20_large_randomcase137 AC 1 ms 256 KB
large/20_large_randomcase138 AC 1 ms 256 KB
large/20_large_randomcase139 AC 1 ms 256 KB
large/20_large_randomcase140 AC 1 ms 256 KB
large/20_large_randomcase141 AC 1 ms 256 KB
large/20_large_randomcase142 AC 1 ms 256 KB
large/20_large_randomcase143 AC 1 ms 256 KB
large/20_large_randomcase144 AC 1 ms 256 KB
large/20_large_randomcase145 AC 1 ms 256 KB
large/20_large_randomcase146 AC 1 ms 256 KB
large/20_large_randomcase147 AC 1 ms 256 KB
large/20_large_testcase100 AC 1 ms 256 KB
large/20_large_testcase101 AC 1 ms 256 KB
large/20_large_testcase102 AC 1 ms 256 KB
large/20_large_testcase103 AC 1 ms 256 KB
large/20_large_testcase104 AC 1 ms 256 KB
large/20_large_testcase105 AC 1 ms 256 KB
large/20_large_testcase106 AC 1 ms 256 KB
large/20_large_testcase107 AC 1 ms 256 KB
large/20_large_testcase108 AC 1 ms 256 KB
large/20_large_testcase109 AC 1 ms 256 KB
large/20_large_testcase110 AC 1 ms 256 KB
large/20_large_testcase111 AC 1 ms 256 KB
large/20_large_testcase112 AC 1 ms 256 KB
large/20_large_testcase113 AC 1 ms 256 KB
large/20_large_testcase114 AC 1 ms 256 KB
large/20_large_testcase115 AC 1 ms 256 KB
large/20_large_testcase117 AC 1 ms 256 KB
large/20_large_testcase118 AC 1 ms 256 KB
large/20_large_testcase119 AC 1 ms 256 KB
large/20_large_testcase120 AC 1 ms 256 KB
large/20_large_testcase121 AC 1 ms 256 KB
large/20_large_testcase122 AC 1 ms 256 KB
large/20_large_testcase123 AC 1 ms 256 KB
large/20_large_testcase124 AC 1 ms 256 KB
large/20_large_testcase125 AC 1 ms 256 KB
large/20_large_testcase126 AC 1 ms 256 KB
large/20_large_testcase127 AC 1 ms 256 KB
large/20_large_testcase84 AC 1 ms 256 KB
large/20_large_testcase85 AC 1 ms 256 KB
large/20_large_testcase86 AC 1 ms 256 KB
large/20_large_testcase88 AC 1 ms 256 KB
large/20_large_testcase89 AC 1 ms 256 KB
large/20_large_testcase90 AC 1 ms 256 KB
large/20_large_testcase91 AC 1 ms 256 KB
large/20_large_testcase93 AC 1 ms 256 KB
large/20_large_testcase95 AC 1 ms 256 KB
large/20_large_testcase97 AC 1 ms 256 KB
large/20_large_testcase98 AC 1 ms 256 KB
large/20_sample3 AC 1 ms 256 KB
small/00_sample1 AC 1 ms 256 KB
small/00_sample2 AC 1 ms 256 KB
small/10_small_randomcase64 AC 1 ms 256 KB
small/10_small_randomcase65 AC 1 ms 256 KB
small/10_small_randomcase66 AC 1 ms 256 KB
small/10_small_randomcase67 AC 1 ms 256 KB
small/10_small_randomcase68 AC 1 ms 256 KB
small/10_small_randomcase69 AC 1 ms 256 KB
small/10_small_randomcase70 AC 1 ms 256 KB
small/10_small_randomcase71 AC 1 ms 256 KB
small/10_small_randomcase72 AC 1 ms 256 KB
small/10_small_randomcase73 AC 1 ms 256 KB
small/10_small_randomcase74 AC 1 ms 256 KB
small/10_small_randomcase75 AC 1 ms 256 KB
small/10_small_randomcase76 AC 1 ms 256 KB
small/10_small_randomcase77 AC 1 ms 256 KB
small/10_small_randomcase78 AC 1 ms 256 KB
small/10_small_randomcase79 AC 1 ms 256 KB
small/10_small_randomcase80 AC 1 ms 256 KB
small/10_small_randomcase81 AC 1 ms 256 KB
small/10_small_randomcase82 AC 1 ms 256 KB
small/10_small_randomcase83 AC 1 ms 256 KB
small/10_small_testcase00 AC 1 ms 256 KB
small/10_small_testcase01 AC 1 ms 256 KB
small/10_small_testcase02 AC 1 ms 256 KB
small/10_small_testcase03 AC 1 ms 256 KB
small/10_small_testcase04 AC 1 ms 256 KB
small/10_small_testcase05 AC 1 ms 256 KB
small/10_small_testcase06 AC 1 ms 256 KB
small/10_small_testcase07 AC 1 ms 256 KB
small/10_small_testcase08 AC 1 ms 256 KB
small/10_small_testcase11 AC 1 ms 256 KB
small/10_small_testcase12 AC 1 ms 256 KB
small/10_small_testcase13 AC 1 ms 256 KB
small/10_small_testcase14 AC 1 ms 256 KB
small/10_small_testcase15 AC 1 ms 256 KB
small/10_small_testcase16 AC 1 ms 256 KB
small/10_small_testcase17 AC 1 ms 256 KB
small/10_small_testcase18 AC 1 ms 256 KB
small/10_small_testcase19 AC 1 ms 256 KB
small/10_small_testcase20 AC 1 ms 256 KB
small/10_small_testcase23 AC 1 ms 256 KB
small/10_small_testcase24 AC 1 ms 256 KB
small/10_small_testcase26 AC 1 ms 256 KB
small/10_small_testcase28 AC 1 ms 256 KB
small/10_small_testcase29 AC 1 ms 256 KB
small/10_small_testcase31 AC 1 ms 256 KB
small/10_small_testcase34 AC 1 ms 256 KB
small/10_small_testcase36 AC 1 ms 256 KB
small/10_small_testcase38 AC 1 ms 256 KB
small/10_small_testcase39 AC 1 ms 256 KB
small/10_small_testcase41 AC 1 ms 256 KB
small/10_small_testcase42 AC 1 ms 256 KB
small/10_small_testcase43 AC 1 ms 256 KB
small/10_small_testcase44 AC 1 ms 256 KB
small/10_small_testcase45 AC 1 ms 256 KB
small/10_small_testcase46 AC 1 ms 256 KB
small/10_small_testcase47 AC 1 ms 256 KB
small/10_small_testcase48 AC 1 ms 256 KB
small/10_small_testcase50 AC 1 ms 256 KB
small/10_small_testcase51 AC 1 ms 256 KB
small/10_small_testcase52 AC 1 ms 256 KB
small/10_small_testcase53 AC 1 ms 256 KB
small/10_small_testcase54 AC 1 ms 256 KB
small/10_small_testcase56 AC 1 ms 256 KB
small/10_small_testcase58 AC 1 ms 256 KB
small/10_small_testcase59 AC 1 ms 256 KB
small/10_small_testcase60 AC 1 ms 256 KB
small/10_small_testcase61 AC 1 ms 256 KB
small/10_small_testcase62 AC 1 ms 256 KB