結果

問題 No.2766 Delicious Multiply Spice
ユーザー ID 21712ID 21712
提出日時 2024-11-07 19:58:35
言語 Go
(1.22.1)
結果
AC  
実行時間 23 ms / 2,000 ms
コード長 1,163 bytes
コンパイル時間 14,445 ms
コンパイル使用メモリ 217,904 KB
実行使用メモリ 7,552 KB
最終ジャッジ日時 2024-11-07 19:58:54
合計ジャッジ時間 16,734 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 13 ms
7,552 KB
testcase_01 AC 13 ms
7,552 KB
testcase_02 AC 13 ms
7,552 KB
testcase_03 AC 13 ms
7,552 KB
testcase_04 AC 13 ms
7,552 KB
testcase_05 AC 12 ms
7,552 KB
testcase_06 AC 12 ms
7,552 KB
testcase_07 AC 13 ms
7,552 KB
testcase_08 AC 13 ms
7,552 KB
testcase_09 AC 12 ms
7,552 KB
testcase_10 AC 12 ms
7,552 KB
testcase_11 AC 13 ms
7,552 KB
testcase_12 AC 13 ms
7,552 KB
testcase_13 AC 14 ms
7,552 KB
testcase_14 AC 13 ms
7,552 KB
testcase_15 AC 13 ms
7,552 KB
testcase_16 AC 13 ms
7,552 KB
testcase_17 AC 13 ms
7,552 KB
testcase_18 AC 14 ms
7,552 KB
testcase_19 AC 13 ms
7,552 KB
testcase_20 AC 13 ms
7,552 KB
testcase_21 AC 14 ms
7,552 KB
testcase_22 AC 15 ms
7,552 KB
testcase_23 AC 15 ms
7,552 KB
testcase_24 AC 15 ms
7,552 KB
testcase_25 AC 15 ms
7,552 KB
testcase_26 AC 14 ms
7,552 KB
testcase_27 AC 14 ms
7,552 KB
testcase_28 AC 14 ms
7,552 KB
testcase_29 AC 14 ms
7,552 KB
testcase_30 AC 14 ms
7,552 KB
testcase_31 AC 15 ms
7,552 KB
testcase_32 AC 14 ms
7,552 KB
testcase_33 AC 15 ms
7,552 KB
testcase_34 AC 14 ms
7,552 KB
testcase_35 AC 23 ms
7,552 KB
testcase_36 AC 15 ms
7,552 KB
testcase_37 AC 15 ms
7,552 KB
testcase_38 AC 15 ms
7,552 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import . "fmt"

type F struct {
	s string
	a, b int64
}

type R struct {
	s string
	x int64
}

func (f *F)Append(e *F) *F{
	return &F{
		s: f.s + e.s,
		a: f.a * e.a,
		b: f.b * e.a + e.b,
	}
}

func (f *F) Remove(n *R) (r *R, ok bool) {
	x := n.x - f.b
	if x < 1 || x % f.a != 0{
		return
	}
	x /= f.a
	ok = x % 2 == 1 || x % 3 == 1
	if ok {
		r = &R{
			s:f.s+n.s,
			x:x,
		}
	}
	return
}

func (r *R)IsFirst() bool {
	return r.x==1
}

func (f *F)String() string {
	return Sprintf("%s (%dx+%d)", f.s, f.a, f.b)
}

func main() {
	
	ffs := [][]*F{
		[]*F{
			&F{"A", 2, 1},
			&F{"B", 3, 1},
		},
	}
	
	for i := 0; i < 4; i++ {
		fs := []*F{}
		for _, x := range ffs[i] {
			for _, y := range ffs[i] {
				f := x.Append(y)
				fs = append(fs, f)
			}
		}
		ffs = append(ffs, fs)
	}
	
	var n R
	Scan(&n.x)
	if n.IsFirst() {
		Println()
		return
	}
	
	rs:=[]*R{&n}
	
	p:=len(ffs)-1
	
	rx:=[]*R{}
	for {
		rx=rx[:0]
		for _,r:=range rs {
			for _,f:=range ffs[p] {
				if x,ok:=f.Remove(r);ok {
					if x.IsFirst() {
						Println(x.s)
						return
					}
					rx=append(rx,x)
				}
			}
		}
		if len(rx)==0 {
			p--
		} else {
			rx,rs=rs,rx
		}
	}
}
0