很显然对边相等就好,所以对应弧长相等就好
预处理出两两之间劣弧长度
dfs搞一波就好了
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int x=0,f=1; char ch=getchar();
while(ch<'0' || ch>'9'){if(ch=='-')f=-1; ch=getchar();}
while(ch>='0' && ch<='9'){x=(x<<1)+(x<<3)+ch-'0'; ch=getchar();}
return x*f;
}
int a[21],d[21][21],s,n,ans,p[4];
int nex(int x){return x+1>n?1:x+1;}
void dfs(int x,int c){
if(c==4){
if(d[p[0]][p[1]]==d[p[2]][p[3]] && d[p[0]][p[3]]==d[p[1]][p[2]])ans++;
return;
}
for(int i=x+1;i<=n;++i)
dfs(p[c]=i,c+1);
}
int main(){
int i,j,g; n=read();
for(i=1;i<=n;++i) s+=(a[i]=read());
for(i=1;i<=n;++i){
g=a[i],d[i][i]=0;
for(j=nex(i);j!=i;g+=a[j],j=nex(j))
d[i][j]=min(g,s-g);
}
dfs(0,0);
printf("%d\n",ans);
return 0;
}