1800: [Ahoi2009]fly 飞行棋
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 1039 Solved: 864
[Submit][Status][Discuss]
Description
给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依圆周顺序排列。 请找出这些点中有没有可以围成矩形的,并希望在最短时间内找出所有不重复矩形。
Input
第一行为正整数N,表示点的个数,接下来N行分别为这N个点所分割的各个圆弧长度
Output
所构成不重复矩形的个数
Sample Input
8
1
2
2
3
1
1
3
3
Sample Output
3
HINT
N<= 20
Source
良心数据范围分分钟变水题……
#include<iostream> #include<cstdio> #include<cstring> #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int n,ans,s[25]; inline int read() { int a=0,f=1; char c=getchar(); while (c<‘0‘||c>‘9‘) {if (c==‘-‘) f=-1; c=getchar();} while (c>=‘0‘&&c<=‘9‘) {a=a*10+c-‘0‘; c=getchar();} return a*f; } int main() { n=read(); for (int i=1;i<=n;i++) { int x=read(); s[i]=s[i-1]+x; } for (int i=1;i<=n;i++) for (int j=i+1;j<=n;j++) for (int k=j+1;k<=n;k++) for (int l=k+1;l<=n;l++) if (s[j]-s[i]==s[l]-s[k]&&s[n]-s[l]+s[i]==s[k]-s[j]) ans++; printf("%d",ans); return 0; }
时间: 2024-10-16 22:29:42