結果
問題 | No.223 1マス指定の魔方陣 |
ユーザー | fmhr |
提出日時 | 2015-06-06 20:11:37 |
言語 | Go (1.22.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,093 bytes |
コンパイル時間 | 12,565 ms |
コンパイル使用メモリ | 224,144 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-10-10 18:58:35 |
合計ジャッジ時間 | 13,227 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | AC | 2 ms
6,820 KB |
testcase_03 | AC | 2 ms
6,820 KB |
testcase_04 | WA | - |
testcase_05 | AC | 1 ms
6,816 KB |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | AC | 2 ms
6,816 KB |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | WA | - |
testcase_19 | WA | - |
testcase_20 | WA | - |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | AC | 1 ms
6,816 KB |
testcase_25 | WA | - |
testcase_26 | WA | - |
testcase_27 | WA | - |
testcase_28 | WA | - |
testcase_29 | WA | - |
testcase_30 | WA | - |
testcase_31 | WA | - |
testcase_32 | WA | - |
testcase_33 | WA | - |
testcase_34 | WA | - |
testcase_35 | WA | - |
testcase_36 | WA | - |
testcase_37 | WA | - |
testcase_38 | WA | - |
testcase_39 | WA | - |
testcase_40 | WA | - |
testcase_41 | WA | - |
testcase_42 | WA | - |
testcase_43 | WA | - |
testcase_44 | WA | - |
testcase_45 | WA | - |
testcase_46 | WA | - |
ソースコード
package main import ( "fmt" ) func main() { var N, X, Y, Z int fmt.Scan(&N, &X, &Y, &Z) mg := magicSquare(N) //print(mg) X-- Y-- N-- // fmt.Println(mg) // fmt.Println(N, X, Y) // if mg[X][Y] == Z { // print(mg) // } else if mg[N-X][Y] == Z { // print1(mg) // } else if mg[X][N-Y] == Z { // print2(mg) // } else { // print3(mg) // } //fmt.Println("------------------") // print(mg) // fmt.Println("------------------") // print1(mg) // fmt.Println("------------------") // print2(mg) // fmt.Println("------------------") // print3(mg) //fmt.Println("------------------") var Zi, Zj int for i := 0; i < N; i++ { for j := 0; j < N; j++ { if mg[i][j] == Z { Zi = i Zj = j } } } mg[Y], mg[Zi] = mg[Zi], mg[Y] for i := 0; i < N; i++ { mg[i][X], mg[i][Zj] = mg[i][Zj], mg[i][X] } print(mg) } func doubleSliceInt(y, x int) [][]int { ss := make([][]int, y) for i := range ss { ss[i] = make([]int, x) } return ss } func odd(N int, z [][]int) [][]int { y := 0 x := N / 2 for i := 0; i < N*N; i++ { z[y][x] = i + 1 y2 := (y + N - 1) % N x2 := (x + 1) % N if z[y2][x2] != 0 { y2 = (y + 1) % N x2 = x } y = y2 x = x2 } return z } func printz(z [][]int, a, b int) { for i := range z { for j := range z[i] { if i+a < 0 { i = i + len(z) + a } else { i = i + a } if j+b < 0 { j = j + len(z) + b } else { j = j + b } fmt.Println(i, j, a, b) fmt.Print(z[i][j], " ") } fmt.Println("") } } func print(z [][]int) { for i := range z { for j := range z[i] { fmt.Print(z[i][j], " ") } fmt.Println("") } } func print1(z [][]int) { l := len(z) - 1 for i := range z { for j := range z[i] { fmt.Print(z[l-i][j], " ") } fmt.Println("") } } func print2(z [][]int) { l := len(z) - 1 for i := range z { for j := range z[i] { fmt.Print(z[i][l-j], " ") } fmt.Println("") } } func print3(z [][]int) { l := len(z) - 1 for i := range z { for j := range z[i] { fmt.Print(z[l-i][l-j], " ") } fmt.Println("") } } func magicSquare(N int) [][]int { z := doubleSliceInt(N, N) if N%2 == 1 { z = odd(N, z) } else if N%4 == 0 { for i := 0; i < N; i++ { for j := 0; j < N; j++ { if i%4 == j%4 || i%4+j%4 == 3 { z[i][j] = N*i + j + 1 } else { z[i][j] = N*N - (N*i + j) } } } } else { n := (N - 2) / 4 seed := doubleSliceInt(2*n+1, 2*n+1) seed = odd(2*n+1, seed) LUX := doubleSliceInt(2*n+1+1, 2*n+1) for i := 0; i < 2*n+1; i++ { LUX[(2*n+1)/2+1][i] = 1 } for i := (2*n+1)/2 + 2; i < (2*n+1)+1; i++ { for j := 0; j < (2*n + 1); j++ { LUX[i][j] = 2 } } LUX[N/4][N/4] = 1 LUX[1+N/4][N/4] = 0 L := [2][2]int{{4, 1}, {2, 3}} U := [2][2]int{{1, 4}, {2, 3}} X := [2][2]int{{1, 4}, {3, 2}} LUXmat := [3][2][2]int{L, U, X} for x := 0; x < N/2; x++ { for y := 0; y < N/2; y++ { val := (seed[x][y] - 1) * 4 idx := LUX[x][y] for a := 0; a < 2; a++ { for b := 0; b < 2; b++ { z[2*x+a][2*y+b] = LUXmat[idx][a][b] + val } } } } } return z }