結果

問題 No.167 N^M mod 10
ユーザー バカらっくバカらっく
提出日時 2019-11-29 05:53:52
言語 Kotlin
(1.9.23)
結果
AC  
実行時間 356 ms / 1,000 ms
コード長 1,609 bytes
コンパイル時間 12,242 ms
コンパイル使用メモリ 446,316 KB
実行使用メモリ 56,952 KB
最終ジャッジ日時 2024-11-20 21:15:27
合計ジャッジ時間 21,989 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 287 ms
55,548 KB
testcase_01 AC 288 ms
55,536 KB
testcase_02 AC 340 ms
56,740 KB
testcase_03 AC 339 ms
56,628 KB
testcase_04 AC 356 ms
56,824 KB
testcase_05 AC 284 ms
55,728 KB
testcase_06 AC 276 ms
55,772 KB
testcase_07 AC 274 ms
55,868 KB
testcase_08 AC 274 ms
55,780 KB
testcase_09 AC 272 ms
55,932 KB
testcase_10 AC 277 ms
55,592 KB
testcase_11 AC 288 ms
55,876 KB
testcase_12 AC 285 ms
55,672 KB
testcase_13 AC 283 ms
55,688 KB
testcase_14 AC 275 ms
56,952 KB
testcase_15 AC 274 ms
55,520 KB
testcase_16 AC 274 ms
55,796 KB
testcase_17 AC 272 ms
55,712 KB
testcase_18 AC 268 ms
55,728 KB
testcase_19 AC 277 ms
55,928 KB
testcase_20 AC 279 ms
55,812 KB
testcase_21 AC 320 ms
55,672 KB
testcase_22 AC 340 ms
56,628 KB
testcase_23 AC 330 ms
56,844 KB
testcase_24 AC 329 ms
56,780 KB
testcase_25 AC 337 ms
56,612 KB
testcase_26 AC 300 ms
56,112 KB
testcase_27 AC 345 ms
56,756 KB
testcase_28 AC 339 ms
56,572 KB
権限があれば一括ダウンロードができます
コンパイルメッセージ
Main.kt:4:10: warning: parameter 'arr' is never used
fun main(arr:Array<String>) {
         ^

ソースコード

diff #

import java.util.*
import kotlin.contracts.contract

fun main(arr:Array<String>) {
    val (n,m) = (1..2).map { readLine()!! }
    val nn = n.last().toString().toInt()

    val dic = mutableMapOf<Int, Int>()

    var subTotal = 1
    var prevIdx = -1
    var toIdx = -1
    for(i in (1 until  20)) {
        subTotal *= nn
        subTotal = subTotal % 10
        if(m.length <= 3 && i == m.toInt()) {
            println(subTotal)
            return
        }
        if(m.length > 3 || m.toInt() >= 20) {
            if(dic.containsKey(subTotal)) {
                prevIdx = dic[subTotal]!!
                toIdx = i
            } else {
                dic[subTotal] = i
            }
        }
    }
    val ans = getAns(m, nn, prevIdx, toIdx)
    println(ans)
}

fun getAns(m:String, nn:Int, prevIdx:Int, toIdx:Int): Int {
    val num = m.map { it.toString().toInt() }.toMutableList()

    var subNum = prevIdx
    for(i in num.indices.reversed()) {
        if(num[i] >= subNum) {
            num[i] -= subNum
            break
        } else {
            num[i] = num[i] - subNum + 10
            subNum = 1
        }
    }
    
    val divNum = toIdx - prevIdx
    while (num.size > 1) {
        if(num[0] > divNum) {
            num[0] = num[0] % divNum
            if(num[0] == 0) {
                num.removeAt(0)
            }
        } else {
            num[1] = (num[0] * 10 + num[1]) % divNum
            num.removeAt(0)
        }
    }
    
    val cnt = prevIdx + num[0]
    
    var ans = 1
    for(i in (1..cnt)) {
        ans = ans * nn
        ans = ans % 10
    }
    return ans
    
}
0