http://acm.hnu.cn/online/?action=problem&type=show&id=13013&courseid=0
题意:给定圆上的n个点之间的距离,问能构成多少个等边三角形。
思路:每次输出a[i],用另外一个数组b[i]保存后缀和,然后放入set容器中,因为可以求出圆的周长,那么每次枚举一个点就可以把另外两个点表示出来,直接在set查找另外两点是否存在即可。
#include<cstdio>
#include<set>
#include<iostream>
using namespace std;
int a[100001],b[100001];
int main()
{
//freopen("a.txt","r",stdin);
int n,i,sum;
set<int>s;
while(scanf("%d",&n)!=EOF)
{
a[0]=b[0]=0;
sum=0;
s.clear();
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=b[i-1]+a[i];
sum+=a[i];
s.insert(b[i]);
//printf("%d %d\n",a[i],b[i]);
}
// printf("%d\n",sum);
if(sum%3!=0) {printf("0\n");continue;}
int m=sum/3;
// printf("%d\n",m);
int ans=0;
for(i=1;i<=n-2;i++)
{
if(s.count(b[i])&&s.count(b[i]+m)&&s.count(b[i]+2*m))
{
ans++;
}
}
printf("%d\n",ans);
}
return 0;
}