题目描述
给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。
输入
第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度
输出
所构成不重复矩形的个数
样例输入
8
1
2
2
3
1
1
3
3
1
2
2
3
1
1
3
3
样例输出
3
提示
N<= 20
n才20呀,这么小,内存要求、时间要求都不重要,怎么都行。
那么一般的想法就是求出直径的条数,因为两条直径构成一个矩形,所以X条构成X*(X-1)/2个矩形。
那么求出直径的方法也很简单,直径平分一个圆嘛,只需要计算连续弧的和是否是总和的一半
然后统计一下就行了。
程序部分语句可能不太精准,但是这题乱搞就行了。没多想。
var n,i,j,d,sum,sum1:longint;
a,f:array[0..1000000] of longint;
begin
readln(n);
sum:=0;
for i:=1 to n do
begin
read(a[i]);
sum:=sum+a[i];
end;
if sum mod 2=1 then
begin
writeln('0');
halt;
end;
sum:=sum div 2;
for i:=1 to n do
begin
sum1:=0;
for j:=i to 2*n do
begin
sum1:=sum1+a[(j-1) mod n+1];
if sum1=sum then
begin
inc(d);
break;
end;
end;
end;
d:=d div 2;
writeln(d*(d-1) div 2);
end.