結果

問題 No.688 E869120 and Constructing Array 2
ユーザー tsuchinagatsuchinaga
提出日時 2019-03-16 05:18:29
言語 Go
(1.22.1)
結果
WA  
実行時間 -
コード長 912 bytes
コンパイル時間 12,460 ms
コンパイル使用メモリ 222,620 KB
実行使用メモリ 6,816 KB
最終ジャッジ日時 2024-07-01 22:20:01
合計ジャッジ時間 15,082 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 WA -
testcase_01 WA -
testcase_02 WA -
testcase_03 WA -
testcase_04 WA -
testcase_05 WA -
testcase_06 WA -
testcase_07 WA -
testcase_08 WA -
testcase_09 RE -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import (
	"fmt"
	"math"
	"strings"
)

func main() {
	var k int
	_, _ = fmt.Scan(&k)

	// 合計が2となる組み合わせは、n1から2個、n0から0~n0個取るだけある
	// n1が増えるたびに組み合わせはn1-1だけ増える。n1が5なら、4 + 3 + 2 + 1の10通り
	// n0の組み合わせは2^n0通り。n0が5なら2^5の32通り
	// n1とn0の合計は30以下でないといけない

	n1, n0 := 2, -1 // 1の数, 0の数
	n1p := 0        // n1を使った組み合わせの数
	for {
		if n1 > 30 {
			break
		}
		n1p += n1 - 1

		if k%n1p == 0 {
			for i := 0; n1+i <= 30; i++ {
				p := n1p * int(math.Pow(2, float64(i)))
				if p == k {
					n0 = i
					break
				}
				if p > k {
					break
				}
			}

			if n0 != -1 {
				break
			}
		}

		n1++
	}

	ans := ""
	ans += strings.Repeat("1 ", n1)
	ans += strings.Repeat("0 ", n0)
	fmt.Println(strings.Trim(ans, " "))
}
0