iT邦幫忙

2022 iThome 鐵人賽

DAY 30
0

學妹最後還是決定跑回去拿書。

我們幾個就在座位區等她。

「說起來,妳有去Leetcode商店逛過了嗎?」Kate學姊期待地問。

「沒有耶。」我回答。

「妳可以去看看啊,說不定妳的點數已經夠了。我記得每天登入、解題、參加競賽都可以拿到點數。」

截圖 2022-10-06 下午2 19 08

「競賽?很難吧?而且不知道什麼時候有。」我退縮起來找藉口。

「每週日都有競賽啊。而且時間有配合我們的時區,上午開始,不像Kotlin Hero都是三更半夜。至於難度,試了才知道吧。」學姊拿出電腦。「要不然妳先用Codeforces暖身一下吧,可以參加過去的比賽,還會幫忙倒數計時。」

我不好拒絕。就開了包含之前題目的比賽,想速戰速決。

真的超像真的比賽,連開始時間都倒數,比賽時長兩小時。

截圖 2022-10-06 下午3 21 32

截圖 2022-10-06 下午3 26 16

第一題就按著之前的寫法交出去。

問題是下一題B. Before an Exam

第一行的變數分別是天數和目標總時數,下面幾行就是每天的時數範圍。要確認是否能達成目標總時數,並把其中一個成功案例列出來。

因為不像leetcode可以先Run Code,結果送了幾個語法錯誤不能編譯的程式碼。

幸好能點進去看哪裡寫錯,但是如果可以編譯卻不能通過測試,就點送出後的得到的編號看原因,或者也可以絞盡腦汁自己找問題。

最後終於得到Accepted的結果。

中間出的小錯誤都不好意思說了,幸好都一一糾正,比較難發現的反而是變數名稱相近,複製錯對象。

截圖 2022-10-06 下午4 43 01

整體思路是這樣的——先把每天的最小時數加總,然後邊比較目標總時數邊把時數補上去。

因此目標總時數少於最小時數加總或多於最大時數加總的就不可能達成。

fun main() {
    val (d, sumTime) = readLine()!!.split(" ").map { it.toInt() }
    if (d * 8 < sumTime) {
      print("NO")
      return
    }
    var sum = 0
    var sumMax = 0
    val arrResult = IntArray(d)
    val arrMax = IntArray(d)
    for (i in 0..(d-1)) {
      val (result, max) = readLine()!!.split(" ").map { it.toInt() }
      arrResult[i] = result
      arrMax[i] = max
      sum += arrResult[i]
      sumMax += arrMax[i]
    }
    if (sum > sumTime || sumMax < sumTime) {
      print("NO")
      return
    }
    if (sum == sumTime) {
      println("YES")
      print(arrResult.joinToString(" "))
      return
    }
    if (sumMax == sumTime) {
      println("YES")
      print(arrMax.joinToString(" "))
      return
    }
    println("YES")
    myloop@ for (i in 0..(d-1)) {
      sum += arrMax[i] - arrResult[i]
      when {
        sum >= sumTime -> {
          arrResult[i] = arrMax[i] - sum + sumTime
          break@myloop
        }
        else -> arrResult[i] = arrMax[i]
      }
    }
    print(arrResult.joinToString(" "))
}

因為一開始不太專心,除了找錯誤還邊聊天花了太多時間,結果時間不夠解決剩下的兩題⋯⋯。

如果是比賽,應該會挑簡單的做,增加成功解題數。但現在只是練習,就按著順序寫第三題。

C. Registration system要求判斷是否是重複的帳號名稱,如果是,要顯示重複的次數。

結果這次語法沒錯誤,邏輯沒錯誤,但遇上超時錯誤。

「⋯⋯妳是不是忘記這種配對查詢用HashMap比較快。」學姊瞄了我的程式碼一眼。「而且codeforces也有CUSTOM INVOCATION可以先跑測試,不用一直上傳錯誤程式碼。」

啊,這幾天被關傻了,竟然用了List做這道題目。

我迅速的改好程式碼。

fun main() {
    val n = readLine()!!.toInt()
    val map = HashMap<String, Int>()
    repeat(n) {
      val name = readLine()!!
      map[name]?.let {
        val count = it
        println("$name$count") 
        map[name] = it + 1
      } ?: run {
        println("OK")
        map[name] = 1
      }
    }
}

正要送出之時,收到了比賽結束的訊息。

截圖 2022-10-06 下午6 30 40

雖然還是可以送出,但是就會歸類在My Submissions而不在My contest submissions了。

「挑戰失敗了啊?要不要改玩codeforces團隊模式?」Kate學姊從包裡拿出另一台電腦。

⋯⋯背包放兩台筆電不重嗎?

「不了,我想出去呼吸新鮮空氣。」求放過。

學姊瞥了一下手錶。「現在出去也不會有新鮮空氣唷。」

「啊?」

「沒什麼,我是問妳要不要等小學妹回來再出去。」

這麼說起來,學妹說去拿書怎麼到現在都還沒回來?

我看了一下,桌子對面的Recca似乎還在準備他說的晚上直播Discord材料,而另一位好像更忙著開會。

我靈機一動:「學姊是希望我留下來陪妳聊天吧?」

「對呀對呀。留下來吧。」

「那我先去個洗手間。」我和學姊借了衛生紙後就走去洗手間。

從洗手間出來後,我沒有馬上回去座位。

「不知道哪裡怪怪的⋯⋯就是感覺有點違和感。」我決定相信第六感往走廊那走。

快走到走廊盡頭時看到了這幾天最熟悉的身影。「嗯?那是學妹?怎麼動作怪怪的?」

「學姊,救我——」學妹哭喪著臉向我求救。

可是妳是怎麼做到維持那個逃生門姿勢的?

學妹瞪著我:「我才不是想做才做的!我被卡住了!好像是我走過去觸發了什麼問題,然後就被卡著了。」

我愣了一下,知道自己覺得哪裡怪了。明明已經走出那個白色房間,可是卻還是覺得人還困在那裡。

「所以妳現在那隻腳是出不去進不來?」

「對!」

我試著上前拉她,真的拉不動;想推她,也推不動。

「⋯⋯我試試伸出去看看。」我將手縮進外套袖口,非常緩慢的將袖子往外挪動。

在袖子快要接近她卡住的地方的時候,突然一個聲音響起:「別試了,外面還沒整頓好。」

我看著那個人。「妳不是學姊吧?」

「現在還不能到外面,但是可以給妳們看看。」學姊外貌的她揮了揮手,學妹就往後仰,跌坐在地上。

但是現在更令我驚訝的是剛剛還很正常的景色,變得非常末世風格,斷垣殘壁。「怎麼會?難道這次的地震這麼厲害?」

「把妳們關在那個房間是保護妳們。」她冷冷的說。

「那為什麼還要強迫解題?」學妹問。

「嗯?人類不是有目標有同伴比較有生存意志嗎?好了,我沒有義務回答問題。要不是妳們達成提前結束的條件,也不會見到我們。回去等吧,明天就恢復妳們的日常。」她說完就消失了。

雖然還有所懷疑,但我和學妹也別無選擇,當回到座位時,那裡已經一個人都沒有了。

只留下兩台筆電。

⋯⋯但是他們不知道,我從那個白色房間裡帶出來的東西還在我右邊的口袋裡。

True End


上一篇
Day 29: [Happy End] Codeforces 相見歡
下一篇
後記
系列文
不解題就不能離開的房間31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言