关于测试用例的 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 块在打印输出时互斥。
我已经使用前缀和来解决这个问题并且它通过了一些测试用例,但是对于更大数量的输入(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 块在打印输出时互斥。