algorithm-go

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub today2098/algorithm-go

:heavy_check_mark: main.go

Depends on

Required by

Verified with

Code

//go:build go1.18

package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
	"sort"
	"strconv"

	"golang.org/x/exp/constraints"
)

const (
	inf  int     = 1e9
	linf int     = 1e18
	eps  float64 = 1e-10
	mod  int     = 998244353
	mod2 int     = 1e9 + 7
)

var (
	sc = bufio.NewScanner(os.Stdin)
	wr = bufio.NewWriter(os.Stdout)
)

func getInt() int {
	sc.Scan()
	elem, err := strconv.Atoi(sc.Text())
	if err != nil {
		panic(err)
	}
	return elem
}

func getFloat64() float64 {
	sc.Scan()
	elem, err := strconv.ParseFloat(sc.Text(), 64)
	if err != nil {
		panic(err)
	}
	return elem
}

func getString() string {
	sc.Scan()
	return sc.Text()
}

func getInts(n int) []int {
	v := make([]int, n)
	for i := 0; i < n; i++ {
		v[i] = getInt()
	}
	return v
}

func getStrings(n int) []string {
	vs := make([]string, n)
	for i := 0; i < n; i++ {
		vs[i] = getString()
	}
	return vs
}

func out(x ...any) {
	fmt.Fprintln(wr, x...)
}

func outArray[T any](arr []T) {
	for i := 0; i < len(arr)-1; i++ {
		fmt.Fprintf(wr, "%v ", arr[i])
	}
	if len(arr) > 0 {
		fmt.Fprintf(wr, "%v", arr[len(arr)-1])
	}
	fmt.Fprintf(wr, "\n")
}

func fill[T any](v []T, x T) {
	for i := 0; i < len(v); i++ {
		v[i] = x
	}
}

func min[T constraints.Ordered](a, b T) T {
	if a < b {
		return a
	}
	return b
}

func max[T constraints.Ordered](a, b T) T {
	if a > b {
		return a
	}
	return b
}

func chmin[T constraints.Ordered](a *T, b T) bool {
	if *a > b {
		*a = b
		return true
	}
	return false
}

func chmax[T constraints.Ordered](a *T, b T) bool {
	if *a < b {
		*a = b
		return true
	}
	return false
}

func abs[T constraints.Integer | constraints.Float](a T) T {
	if a >= 0 {
		return a
	}
	return -a
}

func accumulate[T any](v []T, init T, op func(acc, x T) T) T {
	for i := 0; i < len(v); i++ {
		init = op(init, v[i])
	}
	return init
}

func accumulateDefault[T constraints.Integer | constraints.Float](v []T) T {
	return accumulate(v, 0, func(acc, x T) T {
		return acc + x
	})
}

func minElement[T constraints.Ordered](v []T) int {
	if len(v) == 0 {
		return 0
	}
	itr := 0
	mn := v[0]
	for i := 1; i < len(v); i++ {
		if chmin(&mn, v[i]) {
			itr = i
		}
	}
	return itr
}

func maxElement[T constraints.Ordered](v []T) int {
	if len(v) == 0 {
		return 0
	}
	itr := 0
	mx := v[0]
	for i := 1; i < len(v); i++ {
		if chmax(&mx, v[i]) {
			itr = i
		}
	}
	return itr
}

func lowerBound[T constraints.Ordered](v []T, x T) int {
	itr := sort.Search(len(v), func(i int) bool {
		return v[i] >= x
	})
	return itr
}

func upperBound[T constraints.Ordered](v []T, x T) int {
	itr := sort.Search(len(v), func(i int) bool {
		return v[i] > x
	})
	return itr
}

func main() {
	sc.Split(bufio.ScanWords)
	sc.Buffer([]byte{}, math.MaxInt32)
	defer wr.Flush()

	out(inf, linf, eps, mod, mod2)

	n, m, s := getInt(), getFloat64(), getString()
	out(n, m, s)

	v, vs := getInts(n), getStrings(n)
	outArray(v)
	outArray(vs)

	fill(v, -1)
	outArray(v)

	out(min("hello", "world"), max("hello", "world"))

	a, b, c := 0, 1, -1
	chmin(&b, a)
	chmax(&c, a)
	out(a, b, c)

	out(abs(-10), abs(10))

	w := []int{3, 1, 4, 2, 5}
	out(accumulateDefault(w))
	out(w, minElement(w), maxElement(w))

	sort.Ints(w)
	out(w, lowerBound(w, 3), upperBound(w, 3))
}
Traceback (most recent call last):
  File "/home/runner/.local/lib/python3.10/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
  File "/home/runner/.local/lib/python3.10/site-packages/onlinejudge_verify/languages/user_defined.py", line 68, in bundle
    raise RuntimeError('bundler is not specified: {}'.format(str(path)))
RuntimeError: bundler is not specified: main.go
Back to top page