雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

escription

给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。

Input

第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度

Output

所构成不重复矩形的个数
 
思路:
由于是一个圆,所以要用到类似循环的数组,将原来的数组增加n-1
如n=4延长到
1 2 3 4 1 2 3
即可达到循环效果
枚举即可
View Code
#include<stdio.h>

int a[99];

int main()
{
int n,i,j;
while(scanf("%d",&n)!=EOF)
{
int all=0,shu=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
all+=a[i];
}



for(i=1;i<n;i++)
{
a[n+i]=a[i];
}

int n3=2*n-3,k,x;
for(i=2;i<=n3;i++)
{
for(j=0;j<=n-4;j++)
{
int temp=0;
for(k=i;k<=i+j;k++){
temp+=a[k];
}

if(2*temp>=all) continue;

int ll=0;
for(k=1; (i-k)>=1;k++)//ll左边的
{
ll+=a[i-k];
if(2*ll>(all-2*temp))break;

if(2*ll!=(all-2*temp))continue;

int rr=0;//右边
for(x=1;(i+j+x)<n;x++)
{
rr+=a[i+j+x];
if(rr>ll)break;
if(rr==ll)
{
shu++;
}
}
}
}
}

printf("%d\n",shu);
}
}