夏洛克和数组黑客在测试用例中解决"错误答案"



我使用了前缀和来解决这个问题,它通过了一些测试用例,但对于更多的输入(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("YESn");
else if (n == 2)
printf("NOn");

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("YESn");
val = false;
}
}
if (val) {
printf("NOn");
}    
}
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("YESn");
else if(n == 2)
printf("NOn");
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("YESn");
val=false;
}
}
if(val){
printf("NOn");
}         
}    
}  
return 0;
}

注意阵列大小
打印输出时,使if-else块互斥。

相关内容

最新更新