题解:
这题难度是怎么被评为2300的。。。
暴力
枚举左分界点,然后map统计右分界点
1 #include<bits/stdc++.h> 2 #define maxn 100005 3 #define ll long long 4 using namespace std; 5 int n; 6 int a[maxn]; 7 int pre[maxn],suf[maxn]; 8 map<int,int> ms; 9 int main() 10 { 11 scanf("%d",&n); 12 for(int i=1;i<=n;++i)scanf("%d",&a[i]); 13 for(int i=1;i<=n;++i)pre[i]=pre[i-1]+a[i]; 14 for(int i=n;i>=1;--i)suf[i]=suf[i+1]+a[i]; 15 for(int i=n;i>=3;--i)ms[suf[i]]++; 16 ll ans=0; 17 for(int i=2;i<=n-1;++i) 18 { 19 if(pre[i-1]*2==suf[i]) 20 { 21 ans+=1ll*ms[pre[i-1]]; 22 } 23 ms[suf[i+1]]--; 24 } 25 printf("%I64d ",ans); 26 return 0; 27 }