結果

問題 No.613 Solitude by the window
ユーザー QCFiumQCFium
提出日時 2019-09-29 14:11:31
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
TLE  
実行時間 -
コード長 982 bytes
コンパイル時間 1,842 ms
コンパイル使用メモリ 179,012 KB
実行使用メモリ 235,520 KB
最終ジャッジ日時 2024-10-03 04:28:03
合計ジャッジ時間 8,574 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
12,068 KB
testcase_01 AC 2 ms
6,816 KB
testcase_02 AC 2 ms
6,820 KB
testcase_03 AC 72 ms
110,736 KB
testcase_04 AC 1,986 ms
209,944 KB
testcase_05 AC 41 ms
96,384 KB
testcase_06 AC 50 ms
88,448 KB
testcase_07 AC 578 ms
141,696 KB
testcase_08 AC 517 ms
153,348 KB
testcase_09 TLE -
testcase_10 -- -
testcase_11 -- -
testcase_12 -- -
testcase_13 -- -
testcase_14 -- -
testcase_15 -- -
testcase_16 -- -
testcase_17 -- -
testcase_18 -- -
testcase_19 -- -
testcase_20 -- -
testcase_21 -- -
testcase_22 -- -
testcase_23 -- -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

int ri() {
	int n;
	scanf("%d", &n);
	return n;
}
int64_t rll() {
	long long n;
	scanf("%lld", &n);
	return n;
}

int main() {
	int64_t n = rll();
	int m = ri();
	if (m == 2) {
		std::cout << 0 << std::endl;
		return 0;
	}
	int cur = 2;
	std::map<int, int> rep = {
		{1000000007, 250000001},
		{1000000024, 15625000},
		{1099999997, 61111110},
	};
	if (rep.count(m)) {
		n %= rep[m];
		for (int i = 0; i < n; i++) cur = (int64_t) cur * (cur + 4) % m;
	} else {
		std::vector<bool> used(m);
		std::vector<int> list;
		list.reserve(50000000);
		int i = 0;
		for (; i < n; i++) {
			if (used[cur]) break;
			used[cur] = true;
			list.push_back(cur);
			cur = (int64_t) cur * (cur + 4) % m;
		}
		if (i < n) {
			int index = -1;
			for (int i = 0; i < (int) list.size(); i++) if (list[i] == cur) { index = i; break; }
			assert(index != -1);
			int left = (n - i) % (i - index);
			cur = list[index + left];
		}
	}
	std::cout << cur << std::endl;
	return 0;
}
0