結果

問題 No.1632 Sorting Integers (GCD of M)
ユーザー yudedako
提出日時 2022-03-01 16:48:11
言語 Scala(Beta)
(3.6.2)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,437 bytes
コンパイル時間 14,260 ms
コンパイル使用メモリ 266,984 KB
実行使用メモリ 233,964 KB
最終ジャッジ日時 2025-01-27 00:44:10
合計ジャッジ時間 204,916 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample TLE * 4
other TLE * 59
権限があれば一括ダウンロードができます

ソースコード

diff #

import java.io.PrintWriter
import scala.collection.mutable.*
import scala.io.StdIn.*
import scala.util.chaining.*
import scala.math.*
import scala.reflect.ClassTag
import scala.util.*
import scala.annotation.tailrec
import scala.collection.mutable

@tailrec def gcd(a: Int, b: Int): Int =
  b match
    case 0 => a
    case _ => gcd(b, a % b)

def powMod(base: Int, exp: Int, mod: Int): Long =
  var result = 1L
  var b = base.toLong % mod
  var e = exp
  while e > 0 do
    if (e & 1) == 1 then
      result = result * b % mod
    b = b * b % mod
    e = e >> 1
  result

def calcRest(digitCount: Array[Int], mod: Int): Long =
  var r = 0L
  for i <- 1 to 9 if digitCount(i - 1) > 0 do
    val length = digitCount(i - 1)
    r = (r * powMod(10, length, mod)) % mod
    var value = 0L
    for d <- 29 to 0 by -1 do
      value = (value + value * powMod(10, length >> (d + 1), mod)) % mod
      if ((length >> d) & 1) == 1 then
        value = (value * 10 + i) % mod
    r = (r + value) % mod
  r

@main def main =
  val n = readLine.toInt
  val digitCount = readLine.split(' ').map(_.toInt)
  val diff = for
    i <- 1 to 9 if digitCount(i - 1) > 0
    j <- 1 until i if digitCount(j - 1) > 0
  yield
    9 * (i - j)
  val g = diff.fold(0)(gcd)
  val result = (1 to g).filter(g % _ == 0).findLast{ calcRest(digitCount, _) == 0 }
  result match
    case Some(d) => println(d)
    case None => println(calcRest(digitCount, 1000000007))


0