在做题时不需要想太多,毕竟我们有暴力枚举
2026-04-06 15:31:25
发布于:江西
9阅读
0回复
0点赞
这题虽说方法可以用暴力枚举,但这道题的本质是模拟,所以不需要特意去思考暴力枚举,
用暴力枚举有时还会超时,所以建议用前缀和法。
暴力枚举法:
#include<bits/stdc++.h>
using namespace std;
const int N=2*1E5+5;
int a[N];
int main()
{
int t,q,h;
cin>>t;
while(t--){
bool b=0;
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++){
q=0,h=0;
for(int j=1;j<=i;j++) q+=a[j];
for(int j=i+1;j<=n;j++) h+=a[j];
if(q==h){
cout<<"Yes"<<endl;
b=1;
break;
}else{
q=0;
h=0;
}
}
if(!b) cout<<"No"<<endl;
}
return 0;
}
前缀和法:
#include<bits/stdc++.h>
using namespace std;
const int N=2*1E5+5;
int a[N];
long long s[N];
int main()
{
int t;
cin>>t;
while(t--){
int n;
bool b=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i];
for(int i=1;i<=n-1;i++){
if(s[i]==s[n]-s[i]){
cout<<"Yes\n";
b=1;
break;
}
}
if(!b) cout<<"No"<<endl;
}
return 0;
}
全部评论 2
AC君补药给我删了啊!!!
2026-04-06 来自 江西
1我觉得这是个不错的题解
2026-04-06 来自 江西
1





有帮助,赞一个