← Home
For problem statement at 1000-1999/1200-1299/1230-1239/1239/problemB.txt this is a correct solution, but verifier at 1000-1999/1200-1299/1230-1239/1239/verifierB.go ends with case 64 failed: expected 1
1 1 got 1
2 2
input:
2
)(
exit status 1 can you fix the verifier? package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	var n int
	fmt.Fscan(reader, &n)
	var s string
	fmt.Fscan(reader, &s)

	if n%2 != 0 {
		fmt.Println(0)
		fmt.Println("1 1")
		return
	}

	open := 0
	close := 0
	for i := 0; i < n; i++ {
		if s[i] == '(' {
			open++
		} else {
			close++
		}
	}
	if open != close {
		fmt.Println(0)
		fmt.Println("1 1")
		return
	}

	cur := 0
	minPref := 0
	minIdx := 0
	for i := 0; i < n; i++ {
		if s[i] == '(' {
			cur++
		} else {
			cur--
		}
		if cur < minPref {
			minPref = cur
			minIdx = i
		}
	}

	shift := (minIdx + 1) % n
	t := make([]byte, n)
	for i := 0; i < n; i++ {
		t[i] = s[(shift+i)%n]
	}

	S := make([]int, n+1)
	S[0] = 0
	for i := 0; i < n; i++ {
		if t[i] == '(' {
			S[i+1] = S[i] + 1
		} else {
			S[i+1] = S[i] - 1
		}
	}

	c0 := 0
	for i := 1; i <= n; i++ {
		if S[i] == 0 {
			c0++
		}
	}

	maxBeauty := c0
	bestL := 1
	bestR := 1

	prevZero := 0
	for i := 1; i <= n; i++ {
		if S[i] == 0 {
			L := prevZero + 1
			R := i
			cnt1 := 0
			for j := L; j <= R; j++ {
				if S[j] == 1 {
					cnt1++
				}
			}
			if cnt1 > maxBeauty {
				maxBeauty = cnt1
				bestL = L
				bestR = R
			}
			prevZero = i
		}
	}

	prevLeq1 := 0
	for i := 1; i <= n; i++ {
		if S[i] <= 1 {
			if prevLeq1 > 0 && S[prevLeq1] == 1 && S[i] == 1 && i > prevLeq1+1 {
				L := prevLeq1 + 1
				R := i
				cnt2 := 0
				for j := L; j <= R; j++ {
					if S[j] == 2 {
						cnt2++
					}
				}
				if c0+cnt2 > maxBeauty {
					maxBeauty = c0 + cnt2
					bestL = L
					bestR = R
				}
			}
			prevLeq1 = i
		}
	}

	origL := (shift + bestL - 1) % n + 1
	origR := (shift + bestR - 1) % n + 1

	fmt.Println(maxBeauty)
	fmt.Printf("%d %d\n", origL, origR)
}