fly 飞行棋Crawling in process... Crawling failed Time Limit:10000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu
Description
给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。
Input
第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度
Output
所构成不重复矩形的个数
Sample Input
8 1 2 2 3 1 1 3 3
Sample Output
3
Hint
N<= 20
思路:暴力枚举哒,反正最大20.
AC代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <stdlib.h>
using namespace std;
int l[10000];
int n;
bool solve(int i,int j,int x,int y){
int l1=0,l2=0,l3=0,l4=0;
for(int k=i;k<j;k++){
l1+=l[k];
}
for(int k=j;k<x;k++){
l2+=l[k];
}
for(int k=x;k<y;k++){
l3+=l[k];
}
for(int k=y;k<n;k++){
l4+=l[k];
}
for(int k=0;k<i;k++){
l4+=l[k];
}
if(l1==l3&&l2==l4) return true;
return false;
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&l[i]);
}
int cnt =0;
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int x=j+1;x<n;x++){
for(int y=x+1;y<n;y++){
if(solve(i,j,x,y)){cnt++;
}
}
}
}
}
printf("%d",cnt);
return 0;
}