結果
問題 | No.1595 The Final Digit |
ユーザー |
|
提出日時 | 2021-07-09 23:47:15 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 868 bytes |
コンパイル時間 | 605 ms |
コンパイル使用メモリ | 47,616 KB |
最終ジャッジ日時 | 2025-01-22 22:54:32 |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:9:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 9 | scanf("%u %u %u %llu", &p, &q, &r, &K); | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include<cstdio> #include<vector> using namespace std; using ull = unsigned long long; int main(){ unsigned p, q, r; ull K; scanf("%u %u %u %llu", &p, &q, &r, &K); p %= 10, q %= 10, r %= 10; vector<unsigned> a(1000, 0); unsigned status = p*100 + q*10 + r, now, one_before, two_before, sum, count = 3; a[(10 + (q<<1) - r) %10*100 + (20 + r - p - q)%10*10 + p] = 1; a[(20 + r - p - q)%10*100 + p*10 + q] = 2; do{ sum = (p + q + r)%10; p = q, q = r, r = sum; a[status] = count++; status = status%100*10 + r; }while(!a[status] && count < K); if(count == K){ printf("%u\n", r); return 0; } K = (K - count)%(count - a[status]); for (unsigned i = 0; i < K; i++) { sum = (p + q + r)%10; p = q, q = r, r = sum; } printf("%u\n", r); return 0; }