結果

問題 No.1632 Sorting Integers (GCD of M)
ユーザー yudedako
提出日時 2022-03-01 16:45:19
言語 Scala(Beta)
(3.6.2)
結果
WA  
実行時間 -
コード長 1,431 bytes
コンパイル時間 13,826 ms
コンパイル使用メモリ 268,120 KB
実行使用メモリ 65,644 KB
最終ジャッジ日時 2024-07-07 23:18:32
合計ジャッジ時間 79,154 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 44 WA * 15
権限があれば一括ダウンロードができます

ソースコード

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, 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