fork download
  1. package main
  2.  
  3. import (
  4. "bufio"
  5. "fmt"
  6. "os"
  7. )
  8.  
  9. func abs64(x int64) int64 {
  10. if x < 0 {
  11. return -x
  12. }
  13. return x
  14. }
  15.  
  16. func simulate(N int, A []int, sideA, sideB int) int64 {
  17. l, r := 0, N-1
  18. var sumA, sumB int64
  19. turnA := true
  20. for l <= r {
  21. if turnA {
  22. if sideA == 0 {
  23. sumA += int64(A[l])
  24. l++
  25. } else {
  26. sumA += int64(A[r])
  27. r--
  28. }
  29. } else {
  30. if sideB == 0 {
  31. sumB += int64(A[l])
  32. l++
  33. } else {
  34. sumB += int64(A[r])
  35. r--
  36. }
  37. }
  38. turnA = !turnA
  39. }
  40. if sumA > sumB {
  41. return sumA - sumB
  42. }
  43. return sumB - sumA
  44. }
  45.  
  46. func solve(N int, A []int) int64 {
  47. best := int64(-1)
  48. for sideA := 0; sideA <= 1; sideA++ {
  49. for sideB := 0; sideB <= 1; sideB++ {
  50. diff := simulate(N, A, sideA, sideB)
  51. if best == -1 || diff < best {
  52. best = diff
  53. }
  54. }
  55. }
  56. return best
  57. }
  58.  
  59. func main() {
  60. in := bufio.NewReader(os.Stdin)
  61. var T int
  62. if _, err := fmt.Fscan(in, &T); err != nil {
  63. // if no T present, try to read single test case style:
  64. return
  65. }
  66. for ; T > 0; T-- {
  67. var N int
  68. fmt.Fscan(in, &N)
  69. A := make([]int, N)
  70. for i := 0; i < N; i++ {
  71. fmt.Fscan(in, &A[i])
  72. }
  73. fmt.Println(solve(N, A))
  74. }
  75. }
  76.  
Success #stdin #stdout 0s 5320KB
stdin
1
5
1 1 1 4 3
stdout
0