結果
問題 | No.2989 Fibonacci Prize |
ユーザー |
![]() |
提出日時 | 2024-12-17 14:54:51 |
言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 37 ms / 2,000 ms |
コード長 | 1,040 bytes |
コンパイル時間 | 2,289 ms |
コンパイル使用メモリ | 205,972 KB |
実行使用メモリ | 11,088 KB |
最終ジャッジ日時 | 2024-12-17 14:54:56 |
合計ジャッジ時間 | 4,944 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 77 |
ソースコード
#include <bits/stdc++.h>using namespace std;void fast_io() {ios::sync_with_stdio(false);std::cin.tie(nullptr);}int main() {fast_io();int n;long long m;cin >> n >> m;if (m <= 2) {if (n == 1) {cout << 2 << endl;} else {cout << 0 << endl;}return 0;}if (n == 1) {cout << (long long)(m - 1) * (m - 2) / 2 + 3 << endl;return 0;}vector<int> f{0, 1, 1};while (true) {f.push_back((f[f.size() - 1] + f[f.size() - 2]) % n);if (f[f.size() - 1] == 1 && f[f.size() - 2] == 0) {break;}}f.pop_back();f.pop_back();int per = f.size();auto get = [&](long long i) { return f[i % per]; };long long ans = 0;if (get(m + 2) == get(m + 1)) {ans++;}if (get(m + 1) == get(m)) {ans++;}if (get(m + 1) == get(m - 1)) {ans++;}vector<long long> cnt(n);for (int i = 0; i < per; i++) {cnt[get(i)] += max(0LL, (m - i + per) / per);if (i < 2) {cnt[get(i)]--;}}for (int i = 0; i < n; i++) {ans += cnt[i] * (cnt[i] - 1) / 2;}cout << ans << endl;}