結果
問題 |
No.3211 NAND Oracle
|
ユーザー |
![]() |
提出日時 | 2025-07-31 02:37:39 |
言語 | Go (1.23.4) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,002 bytes |
コンパイル時間 | 12,715 ms |
コンパイル使用メモリ | 256,444 KB |
実行使用メモリ | 7,764 KB |
最終ジャッジ日時 | 2025-07-31 02:38:00 |
合計ジャッジ時間 | 18,617 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | AC * 20 WA * 8 |
ソースコード
package main import . "fmt" func Xmain() { var q,k int Scan(&q,&k) if q == 5 && k >= 4 { Println(`Yes 1 2 1 2 1 2 3 4 3 4`) // [0,0] [0,1] [1,0] [1,1] sum<=2 // Q=1 -> 1,2 // [0,0,1] [0,1,1] [1,0,1] [1,1,0] sum<=2 // Q=2 -> 1,2 // [0,0,1,1] [0,1,1,1] [1,0,1,1] [1,1,0,0] sum<=3 // Q=3 -> 1,2 // [0,0,1,1,1] [0,1,1,1,1] [1,0,1,1,1] [1,1,0,0,0] sum<=4 // Q=4 -> 3,4 // [0,0,1,1,1,0] [0,1,1,1,1,0] [1,0,1,1,1,0] [1,1,0,0,0,1] sum<=4 // Q=5 -> 3,4 // [0,0,1,1,1,0,0] [0,1,1,1,1,0,0] [1,0,1,1,1,0,0] [1,1,0,0,0,1,1] sum<=4 return } // [0,0] [0,1] [1,0] [1,1] sum<=2 // Q=1 -> 1,2 // [0,0,1] [0,1,1] [1,0,1] [1,1,0] sum<=2 // Q=2 -> 1,2 // [0,0,1,1] [0,1,1,1] [1,0,1,1] [1,1,0,0] sum<=3 // Q=3 -> 3,4 // [0,0,1,1,0] [0,1,1,1,0] [1,0,1,1,0] [1,1,0,0,1] sum<=3 // Q=4 -> 4,5 // [0,0,1,1,0,1] [0,1,1,1,0,1] [1,0,1,1,0,1] [1,1,0,0,1,1] sum<=4 // Q=5 -> 4,5 // [0,0,1,1,0,1,1] [0,1,1,1,0,1,1] [1,0,1,1,0,1,1] [1,1,0,0,1,1,1] sum<=5 // Q>=6 -> 6,7 // [0,0,1,1,0,1,1,0] [0,1,1,1,0,1,1,0] [1,0,1,1,0,1,1,0] [1,1,0,0,1,1,1,0] sum<=5 var ans bool switch q { case 1: ans = k >= 2 case 2,3: ans = k >= 3 case 4: ans = k >= 4 default: ans = k >= 5 } if ans { Println("Yes") } else { Println("No") return } ops := make([]string, 0, q) ops = append(ops, "1 2", "1 2", "3 4", "4 5", "4 5") for len(ops) < q { ops = append(ops, "6 7") } for _, op := range ops[:q] { Println(op) } } func init() { // check() } func main() { const X = 10 orig := [][]int{ append(make([]int, 0, X), 0, 0)[:X], append(make([]int, 0, X), 0, 1)[:X], append(make([]int, 0, X), 1, 0)[:X], append(make([]int, 0, X), 1, 1)[:X], } bestSum := make([]int, X) for i := range bestSum { bestSum[i] = 9999 } bestCmd := make([][]int, X) var dfs func(sz int, arr [][]int, ops, sum []int) dfs = func(sz int, arr [][]int, ops, sum []int) { if s := max(sum[0],sum[1],sum[2],sum[3]); s < bestSum[sz] { bestSum[sz] = s tmp := make([]int, len(ops)) copy(tmp, ops) bestCmd[sz] = tmp } if sz+1 >= X { return } for i := 0; i < sz; i++ { for j := i+1; j < sz; j++ { for _, ar := range arr { ar[sz] = 1^(ar[i] & ar[j]) } ops = append(ops, i+1, j+1) for i, ar := range arr { sum[i] += ar[sz] } dfs(sz+1, arr, ops, sum) ops = ops[:len(ops)-2] for i, ar := range arr { sum[i] -= ar[sz] } } } } dfs(2, orig, make([]int, 0, 100), []int{0,1,1,2}) for i, s := range bestSum { println(Sprintf("q=%d, k=%d, %#v", i-2, s, bestCmd[i])) } { var q, k int Scan(&q,&k) ops := []int{} if q+2 < len(bestSum) { if k < bestSum[q+2] { Println("No") return } ops = bestCmd[q+2] } else { if k < bestSum[X-1] { Println("No") return } ops = make([]int, len(bestCmd[X-1]), q*2) copy(ops, bestCmd[X-1]) for len(ops) < q*2 { ops = append(ops, 3, 4) } } Println("Yes") for i := 0; i < q; i++ { Println(ops[i*2], ops[i*2+1]) } } }