結果
| 問題 |
No.4 おもりと天秤
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-10-05 09:38:21 |
| 言語 | Text (cat 8.3) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,333 bytes |
| コンパイル時間 | 158 ms |
| コンパイル使用メモリ | 6,816 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-11-16 20:58:11 |
| 合計ジャッジ時間 | 1,055 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 23 |
ソースコード
; kuin_2017_09_17
func main()
; おもりの数
var n: int
; おもりの重さ
var ww: []int
var ww_str: [][]char
; = STDIN読み込み ============
; 文字列を読み込み,整数に変換してnに格納する
; 何故か参照として渡す仕様に注意
do cui@input().toInt(&n)
; 文字列を読み込み,半角スペースで区切ってww_strに格納する
do ww_str :: cui@input().split(" ")
; 配列wwの動的確保
; # は,インスタンス生成を表現する.
do ww :: #[n]int
; forループ.cntはブロック名.変数ではないので代入不可.
for cnt(0, n-1)
; ww_str[cnt]を整数に変換して,ww[cnt]にセットする.
do ww_str[cnt].toInt(&ww[cnt])
end for
; = 以降,動的計画法 ============
var dp: []bool :: #[10001]bool
do dp[0] :: true
for i(0, n-1)
var w : int :: ww[i]
for c(10000, 0, -1) {逆順ループ}
if (dp[c])
do dp[c+w] :: true
end if
end for
end for
var sum: int :: 0
for i(0, n-1)
do sum :+ ww[i]
end for
{
if (sum%2 = 1 | dp[sum/2] = false)
do cui@print("impossible")
else
do cui@print("possible")
end if
}
; 横に長くなってしまい,改行したいときは | を使う
do cui@print(
| (sum%2 = 1 | dp[sum/2] = false)
| ?("impossible", "possible")
| )
end func