結果
問題 |
No.1339 循環小数
|
ユーザー |
![]() |
提出日時 | 2021-01-15 22:09:51 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,469 bytes |
コンパイル時間 | 1,445 ms |
コンパイル使用メモリ | 167,536 KB |
実行使用メモリ | 13,640 KB |
最終ジャッジ日時 | 2024-11-26 15:08:54 |
合計ジャッジ時間 | 50,924 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 20 TLE * 16 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define int long long typedef pair<int,int> P; int INF = 3e18+7; int mod = 1e9+7; int dx[] = {1, 0,-1, 0, 1, 1,-1,-1}; int dy[] = {0, 1, 0,-1, 1,-1, 1,-1}; int junkan2(int n) { int m = 1; // カメ。剰余を保持する変数(初期値1) int p = 1; // ウサギ。剰余を保持する変数(初期値1) int s = 0; // 循環節の開始位置 int t = 0; // 循環節の終了位置 if (n > 0) { // ウサギとカメが出合う地点を探す while (true) { m = (m * 10) % n; p = (p * 10) % n; p = (p * 10) % n; if (m == p)break; } // pが非ゼロ。割り切れない場合 if (p != 0) { // ウサギをスタート地点に戻し、再びカメと出合うまでループを回す p = 1; s = 1; while (m != p) { s++; m = (m * 10) % n; p = (p * 10) % n; } // カメを止めて、ウサギだけ1ずつ進める p = (p * 10) % n; t = s; while (m != p) { t++; p = (p * 10) % n; } } } return t-s+1; } signed main() { int T; cin >> T; while (T--) { int N; cin >> N; cout << junkan2(N) << endl; } }