結果
問題 | No.217 魔方陣を作ろう |
ユーザー |
![]() |
提出日時 | 2015-05-27 06:53:30 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,590 bytes |
コンパイル時間 | 10,532 ms |
コンパイル使用メモリ | 233,824 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-10-10 18:47:30 |
合計ジャッジ時間 | 11,715 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 |
ソースコード
package mainimport ("fmt")func odd(N int, z [][]int) [][]int{row := 0col := N / 2for i := 0; i < N*N; i++ {z[row][col] = i + 1nrow := (row + N - 1) % Nncol := (col + 1) % Nif z[nrow][ncol] != 0 {nrow = (row + 1) % Nncol = col}row = nrowcol = ncol}return z}func print(z [][]int){for i := range z {for j:= range z[i] {fmt.Print(z[i][j], " ")}fmt.Println("")}}func main() {var N intfmt.Scan(&N)z := make([][]int, N)for i := 0; i < N; i++ {z[i] = make([]int, 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)/4seed := make([][]int, 2*n+1) //+1for i:= range seed{seed[i] = make([]int, 2*n+1)}seed = odd(2*n+1, seed)LUX := make([][]int, 2*n+1+1) //+1for i:= range LUX{LUX[i] = make([]int, 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}}//print(LUX)LUX[N/4][N/4] = 1LUX[1 + N/4][N/4] = 0//print(LUX)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) * 4idx := 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}}}}}print(z)}