【问题标题】:Sherlock and Array hackerrank problem 'wrong answer' on test casesSherlock 和 Array hackerrank 问题在测试用例上的“错误答案”
【发布时间】:2021-01-14 12:15:41
【问题描述】:

我使用前缀和来解决这个问题,它通过了一些测试用例,但对于大量输入(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;
}

【问题讨论】:

  • 将每个测试用例的val初始化为true
  • @rishab 您的代码行在此处无法执行:onlinegdb.com/r1GBon6CD
  • @asds_asds 即使在每个案例都将其初始化为 true 之后,我的两个测试用例仍然是错误的。菜鸟错了。
  • @Anshu 在 C++ 编译器上试试,而不是 C
  • @rishab - 您使用的是 c 而不是 c++ 的语法,请在最后检查您使用的是哪种语言。

标签: c++ c++14


【解决方案1】:
#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 块互斥。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多