結果

問題 No.443 GCD of Permutation
ユーザー 💕💖💞💕💖💞
提出日時 2016-11-19 22:32:49
言語 Go
(1.22.1)
結果
TLE  
実行時間 -
コード長 1,322 bytes
コンパイル時間 14,024 ms
コンパイル使用メモリ 223,084 KB
実行使用メモリ 376,044 KB
最終ジャッジ日時 2024-11-27 06:21:45
合計ジャッジ時間 51,190 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
10,496 KB
testcase_01 AC 1 ms
67,604 KB
testcase_02 AC 1 ms
10,496 KB
testcase_03 AC 1 ms
88,296 KB
testcase_04 AC 27 ms
12,928 KB
testcase_05 AC 1 ms
13,640 KB
testcase_06 AC 2 ms
10,496 KB
testcase_07 AC 1 ms
86,644 KB
testcase_08 AC 1 ms
10,496 KB
testcase_09 AC 2 ms
65,744 KB
testcase_10 AC 1 ms
10,496 KB
testcase_11 AC 1 ms
86,732 KB
testcase_12 AC 1 ms
10,496 KB
testcase_13 AC 1 ms
74,076 KB
testcase_14 TLE -
testcase_15 TLE -
testcase_16 TLE -
testcase_17 TLE -
testcase_18 TLE -
testcase_19 TLE -
testcase_20 TLE -
testcase_21 TLE -
testcase_22 TLE -
testcase_23 TLE -
testcase_24 TLE -
testcase_25 TLE -
testcase_26 TLE -
testcase_27 TLE -
testcase_28 TLE -
testcase_29 TLE -
testcase_30 TLE -
testcase_31 TLE -
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import (
	"bufio"
	"fmt"
	"math/big"
	"os"
)

func Iter(p []rune) func() int {
	f := pf(len(p))
	return func() int {
		return f(p)
	}
}

// Recursive function used by perm, returns a chain of closures that
// implement a loopless recursive SJT.
func pf(n int) func([]rune) int {
	sign := 1
	switch n {
	case 0, 1:
		return func([]rune) (s int) {
			s = sign
			sign = 0
			return
		}
	default:
		p0 := pf(n - 1)
		i := n
		var d int
		return func(p []rune) int {
			switch {
			case sign == 0:
			case i == n:
				i--
				sign = p0(p[:i])
				d = -1
			case i == 0:
				i++
				sign *= p0(p[1:])
				d = 1
				if sign == 0 {
					p[0], p[1] = p[1], p[0]
				}
			default:
				p[i], p[i-1] = p[i-1], p[i]
				sign = -sign
				i += d
			}
			return sign
		}
	}
}

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	th := 0
	lines := []string{}
	for scanner.Scan() {
		th += 1
		text := scanner.Text()
		lines = append(lines, text)
		if th == 1 {
			break
		}
	}
	target := lines[0]
	runes := []rune(target)
	i := Iter(runes)
	ns := []big.Int{}
	for sign := i(); sign != 0; sign = i() {
		//fmt.Println(string(runes))
		n := *big.NewInt(0)
		n.SetString(string(runes), 10)
		ns = append(ns, n)
	}
	n_tmp := ns[0]
	for _, n_adhoc := range ns {
		n_tmp.GCD(nil, nil, &n_tmp, &n_adhoc)
	}
	fmt.Println(&n_tmp)
}
0