package main import ( "fmt" ) /* 优先在铭文右侧放能量水晶 再考虑 如果出现至少3个符文相连的情况,则无法全部激活 */ func main() { var n int fmt.Scanf("%d", &n) var k = make([]int, n) for i := 0;i<n;i++{ fmt.Scanf("%d", &k[i]) } var success bool = true var sum int = 0 for i:=0;i<n;i++ { if k[i] == 1{ if i+1 < n && k[i+1] == 0 { // 只考虑右侧,因为从左到右遍历 k[i+1] = 2 sum++ i+=2 }else if i+1 < n && k[i+1] == 1 && i-1 >= 0 && k[i-1]==1{ // 两边都有符文,无法全部激活 success = false break }else if i+1 < n && k[i+1] == 1 && i-1 >= 0 && k[i-1]==0{ // 左空,右铭文 k[i-1] = 2 sum++ }else if i+1 < n && k[i+1] == 0 && i-1 >= 0 && k[i-1]==1{ // 左铭文,右空 k[i+1] = 2 sum++ } } } // 判断最后两个 if n > 2 { if k[n-2] == 1 && k[n-1]==1{ success = false } if k[n-2] == 0 && k[n-1]==1{ k[n-2] =2 sum++ } } if success { fmt.Println(sum) } else { fmt.Println(-1) } }