← Home
For problem statement at 1000-1999/1800-1899/1870-1879/1876/problemB.txt this is a correct solution, but verifier at 1000-1999/1800-1899/1870-1879/1876/verifierB.go ends with All tests passed can you fix the verifier? package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
)

type Pair struct {
	val int
	idx int
}

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	if _, err := fmt.Fscan(reader, &n); err != nil {
		return
	}

	a := make([]Pair, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(reader, &a[i].val)
		a[i].idx = i + 1
	}

	sort.Slice(a, func(i, j int) bool {
		return a[i].val > a[j].val
	})

	divs := make([][]int, n+1)
	for i := 1; i <= n; i++ {
		for j := i; j <= n; j += i {
			divs[j] = append(divs[j], i)
		}
	}

	MOD := 998244353
	pow2 := make([]int, n+1)
	pow2[0] = 1
	for i := 1; i <= n; i++ {
		pow2[i] = (pow2[i-1] * 2) % MOD
	}

	seen := make([]bool, n+1)
	cnt := 0
	ans := 0

	for _, p := range a {
		newDivs := 0
		for _, d := range divs[p.idx] {
			if !seen[d] {
				seen[d] = true
				newDivs++
			}
		}

		if newDivs > 0 {
			ways := (pow2[n-cnt] - pow2[n-(cnt+newDivs)] + MOD) % MOD
			term := (ways * p.val) % MOD
			ans = (ans + term) % MOD
			cnt += newDivs
		}
	}

	fmt.Println(ans)
}