关于测试用例的 Sherlock 和 Array hackerrank 问题 'wrong answer'

Sherlock and Array hackerrank problem 'wrong answer' on test cases

我已经使用前缀和来解决这个问题并且它通过了一些测试用例,但是对于更大数量的输入(n,更长的数组)它似乎失败了。我无法在代码中找到错误。我已粘贴以下代码:

#include<stdio.h>

using namespace std;

int main() {
  long long t, n, arr[100000], pre[100000];
  bool val = true;
  scanf("%lld", &t);

  while (t--) {
    scanf("%lld", &n);
    arr[0] = 0;

    for (int i = 1; i <= n; i++) {
      scanf("%lld", &arr[i]);
    }
           
    if (n == 1)
      printf("YES\n");
    else if (n == 2)
      printf("NO\n");
           
    pre[0] = arr[0];
           
    for (int i = 1; i <= n; i++) {
      pre[i] = pre[i - 1] + arr[i];
    }
           
    for (int i = 1; i <= n; i++) {
      if (pre[n] - pre[i] == pre[i - 1]) {
        printf("YES\n");
        val = false;
      }
    }

    if (val) {
      printf("NO\n");
    }    
  }
  return 0;
}
#include<stdio.h>
using namespace std;
int main(){
  long long t, n, arr[100002], pre[100002];

  scanf("%lld", &t);

  while(t--){
       bool val=true;
       scanf("%lld",&n);
       arr[0]=0;
       for (int i = 1; i <= n; i++)
       {
            scanf("%lld", &arr[i]);
       }
       
       if(n == 1)
            printf("YES\n");
       else if(n == 2)
            printf("NO\n");
       else{
            pre[0]=arr[0];
       
            for (int i = 1; i <= n; i++)
            {
                pre[i]=pre[i-1]+arr[i];
            }
            
            for (int i = 1; i <= n; i++)
            {
                if(pre[n]-pre[i] == pre[i-1]){
                    printf("YES\n");
                    val=false;
                }
            }
            if(val){
                printf("NO\n");
            }         
       }    
    }  
  return 0;
}

注意数组大小。
使 if else 块在打印输出时互斥。