結果

問題 No.217 魔方陣を作ろう
ユーザー fmhrfmhr
提出日時 2015-05-27 06:02:50
言語 Go
(1.22.1)
結果
WA  
実行時間 -
コード長 1,540 bytes
コンパイル時間 11,001 ms
コンパイル使用メモリ 237,720 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-10-10 18:46:39
合計ジャッジ時間 11,906 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
5,248 KB
testcase_01 WA -
testcase_02 AC 1 ms
5,248 KB
testcase_03 AC 1 ms
5,248 KB
testcase_04 AC 1 ms
5,248 KB
testcase_05 WA -
testcase_06 AC 1 ms
5,248 KB
testcase_07 WA -
testcase_08 AC 2 ms
5,248 KB
testcase_09 WA -
testcase_10 AC 2 ms
5,248 KB
testcase_11 WA -
testcase_12 AC 2 ms
5,248 KB
testcase_13 WA -
testcase_14 AC 1 ms
5,248 KB
testcase_15 WA -
testcase_16 AC 2 ms
5,248 KB
testcase_17 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import (
	"fmt"
)

func odd(N int, z [][]int) [][]int{
	row := 0
	col := N / 2
	for i := 0; i < N*N; i++ {
		z[row][col] = i + 1
		nrow := (row + N - 1) % N
		ncol := (col + 1) % N
		if z[nrow][ncol] != 0 {
			nrow = (row + 1) % N
			ncol = col
		}
		row = nrow
		col = 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 int
	fmt.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 y := 0; y < N; y++ {
			for x := 0; x < N; x++ {
				ty := y % 4
				tx := x % 4
				if (tx%3 == 0 || ty%3 == 0) && (tx%3 == 0 && ty%3 == 0) {
					z[y][x] = N*N + 1-(y*N+x+1)
				} else {
					z[y][x] = y*N + x + 1
				}
			}
		}
	} else{
		seed := make([][]int, N/2+1)
		for i:= range seed{
			seed[i] = make([]int, N/2)
		}
		seed = odd(N/2, seed)

		LUX := make([][]int, N/2+1)
		for i:= range LUX{
			LUX[i] = make([]int, N/2)
		}

		for i:=0; i<N/2; i++{
			LUX[N/2-1][i] = 1
		}
		for i:=0; i<N/2; i++{
			LUX[N/2][i] = 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
					}
				}

			}
		}

	}
	print(z)
}
0