結果
問題 | No.718 行列のできるフィボナッチ数列道場 (1) |
ユーザー |
![]() |
提出日時 | 2018-07-27 23:24:01 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 184 ms / 2,000 ms |
コード長 | 5,071 bytes |
コンパイル時間 | 677 ms |
コンパイル使用メモリ | 73,592 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-05 05:10:16 |
合計ジャッジ時間 | 2,782 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 20 |
ソースコード
#include <iostream>#include <vector>#include <string>#include <algorithm>#include <cstdio>#include <cstring>#include <cmath>using namespace std;using ll = long long;constexpr int P = 1000000007;int main() {ll n;cin >> n;if (n == 10000000000) {cout << 128493982 << endl;return 0;}int p[100][3] = {0, 1, 0,908460138, 945351196, 964927951,371975563, 80688602, 946533617,967988087, 800447448, 509786860,392460984, 947746097, 207105907,864787550, 220121405, 200000007,4660654, 539612979, 371423623,393241336, 850278613, 407794103,530142919, 975243705, 885945115,662356693, 442753488, 73070046,21, 999999994, 999999734,964730508, 788097308, 978161894,47291577, 762534955, 287143675,897801569, 921932940, 250793022,558994539, 920981438, 758601952,219772980, 298960180, 200012817,173410246, 82905056, 54967674,485645421, 204446108, 496453263,455258545, 454833148, 726782935,777695784, 153695153, 672638455,999999020, 610, 999397937,749206315, 14075594, 838357449,405320339, 80168765, 779553125,835338478, 868704687, 990409271,334795872, 766126632, 27390880,805882474, 728750240, 228284466,845057847, 563849424, 942232496,781424045, 540754388, 264550114,72705620, 647598500, 123981650,785941725, 333574377, 439990192,46368, 999971350, 671232238,822572946, 550349788, 276715547,902652630, 469533125, 186591601,841290252, 248947065, 582453221,705599596, 71067117, 693070236,903751015, 449778785, 623800565,108871225, 416172205, 452136886,787424730, 380097838, 365644695,127577343, 108037569, 900717152,283043407, 168309240, 385708940,997821698, 1346269, 410141410,589865503, 119484552, 872850958,170006352, 851774521, 28107846,624019965, 430783349, 483840929,502023354, 893718904, 578609710,717820129, 131647019, 499553298,37994620, 876057088, 923868375,209613911, 594647359, 713286550,931159308, 274635799, 758759346,911018251, 755891406, 819634879,102334155, 936754021, 510853745,453748616, 833876317, 105335718,107048889, 497064675, 847424535,829771610, 504235679, 254470054,699302941, 924144696, 298551243,358703167, 362811371, 890320855,105381649, 409144953, 525352914,360721530, 671476492, 857760585,107935489, 984079976, 681148200,899099104, 304794930, 548456798,192473059, 971215059, 44066357,83949699, 688328829, 603077492,798695907, 786185929, 237828250,376714645, 870139913, 131564763,630738657, 671480699, 323979426,423131148, 816218670, 438560380,9067912, 894130268, 530005158,836474305, 845957748, 364311742,995872758, 473605658, 535307981,831324169, 918746996, 624510285,851432142, 416138535, 743595923,600615566, 814668958, 886680257,354243748, 552196928, 39519988,464640208, 599188704, 108960298,655980397, 516262682, 724037382,754133024, 274911412, 12431477,468426494, 566732752, 196023050,324986415, 568509639, 178248829,86045214, 756454266, 743558048,28665233, 514096566, 745732999,790216554, 470273943, 72124658,687118902, 22230418, 300236456,551848063, 260558644, 982785105,785195740, 967991209, 343811684,538182908, 64173422, 626511910,132616976, 262945064, 997709618,974887031, 469430584, 92863609,889164309, 434089415, 30851551,960002226, 973044099, 497292916,821409901, 918714584, 208207434,8390086, 480986305, 435523618,104796271, 140501410, 735173949,708897480, 201546895, 967192012,631160278, 905224802, 683421425,49423109, 467586512, 987738762,12869153, 366670671, 932680483,711883378, 370029961, 753961026,884291363, 29288003, 911124200,793850486, 510473410, 781900333,365069693, 306318294, 768071074,};ll k = n / 100000000, m = n % 100000000;ll f0, f1 = p[k][0], f2 = p[k][1];ll s = p[k][2];for (int i = 0; i < m; i++) {s += f2 * f2 % P;f0 = f1;f1 = f2;f2 = f0 + f1;if (f2 >= P) f2 -= P;}s %= P;cout << s << endl;//ll f0, f1 = 0, f2 = 1;//ll s = 0;//for (int j = 0; j < 100; j++) {// cout << f1 << ", " << f2 << ", " << s << ", " << '\n';// for (int i = 0; i < 100000000; i++) {// s += f2 * f2 % P;// f0 = f1;// f1 = f2;// f2 = f0 + f1;// if (f2 >= P) f2 -= P;// }// s %= P;//}return 0;}