結果

問題 No.184 たのしい排他的論理和(HARD)
コンテスト
ユーザー ともき
提出日時 2015-06-18 14:42:39
言語 Scala(Beta)
(3.8.1)
コンパイル:
scalac _filename_
実行:
java -cp .:/home/linuxbrew/.linuxbrew/Cellar/scala/3.8.1/libexec/maven2/org/scala-lang/scala3-library_3/3.8.1/scala3-library_3-3.8.1.jar:/home/linuxbrew/.linuxbrew/Cellar/scala/3.8.1/libexec/maven2/org/scala-lang/scala-library/3.8.1/scala-library-3.8.1.jar _class_
結果
CE  
(最新)
AC  
(最初)
実行時間 -
コード長 1,527 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 6,931 ms
コンパイル使用メモリ 224,288 KB
最終ジャッジ日時 2026-03-09 13:26:02
合計ジャッジ時間 7,459 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge2_0
このコードへのチャレンジ
(要ログイン)
コンパイルエラー時のメッセージ・ソースコードは、提出者また管理者しか表示できないようにしております。(リジャッジ後のコンパイルエラーは公開されます)
ただし、clay言語の場合は開発者のデバッグのため、公開されます。

コンパイルメッセージ
-- [E040] Syntax Error: Main.scala:29:31 ---------------------------------------
29 |  def main(args: Array[String]){
   |                               ^
   |                               '=' expected, but '{' found
1 error found

ソースコード

diff #
raw source code

import scala.io.StdIn.readLine
import scala.util.control.Breaks

object Main{
  def ipow(x : Long,n : Long) : Long = {
    if(x == 0)
      1
    else if(n % 2 == 0)
      ipow(x*x,n/2)
    else
      x * ipow(x*x,n/2)
  }

  def popcount(x : Long) : Long = {
    var ret = 0
    var xi = x
    while(xi != 0){
      xi = xi & (xi-1)
      ret = ret + 1
    }
    ret
  }

  def to_bit_str(x : Long) : String = {
    val bi = (0 to 62).map((i : Int) => if ((x & (1L << i)) != 0) "1" else "0" ).reverse
    bi.map(_.toString).fold("")(_ + _)
  }

  def main(args: Array[String]){
    val n = readLine().toLong
    val a = readLine().split(" ").map(_.toLong).sorted.distinct.reverse
    val MAXK = 62
    var i = 0
    var used = Set[Int]()
    for(k <- 0 to MAXK){
      val mask = 1L << (MAXK-k)
      val b = new Breaks
      b.breakable {
        for((e,i) <- a.zipWithIndex){
          if(!used(i) && (e & mask) != 0){
            used = used + i
            for((c,h) <- a.zipWithIndex){
              if(!used(h) && ((c & mask) != 0)){
                a(h) = a(h) ^ e
              }
            }
            // println("---------------------------------")
            // a.map(to_bit_str).foreach(println)
            // println("---------------------------------")
            b.break
          }
        }
      }
    }
    // println("---------------------------------")
    // a.map(to_bit_str).foreach(println)
    // println("---------------------------------")
    println(ipow(2,a.distinct.count(_ != 0)))
  }
}
0