結果
| 問題 |
No.217 魔方陣を作ろう
|
| コンテスト | |
| ユーザー |
fmhr
|
| 提出日時 | 2015-05-27 07:42:15 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,824 bytes |
| コンパイル時間 | 12,648 ms |
| コンパイル使用メモリ | 241,748 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-10 18:47:58 |
| 合計ジャッジ時間 | 12,261 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 18 |
ソースコード
package main
import (
"fmt"
)
func doubleSliceInt(y, x int) [][]int{
mslice := make([][]int, y)
for i:= range mslice{
mslice[i] = make([]int, x)
}
return mslice
}
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 print(z [][]int){
for i := range z {
for j:= range z[i] {
fmt.Print(z[i][j], " ")
}
fmt.Println("")
}
}
func main() {
var N int
fmt.Scan(&N)
z := doubleSliceInt(N, 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)/4
seed := doubleSliceInt(2*n+1, 2*n+1)
// seed := make([][]int, 2*n+1) //+1
// for i:= range seed{
// seed[i] = make([]int, 2*n+1)
// }
seed = odd(2*n+1, seed)
LUX := doubleSliceInt(2*n+1+1, 2*n+1)
// LUX := make([][]int, 2*n+1+1) //+1
// for 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] = 1
LUX[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) * 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
}
}
}
}
}
print(z)
}
fmhr