codeforces 21C

题解:

这题难度是怎么被评为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\n",ans);
26     return 0; 
27 }
View Code

 

posted @ 2019-03-17 16:25  幽蝶  阅读(130)  评论(0编辑  收藏  举报