题意:圆上均匀的分布n个点,每个点的值为1或者0,求是否存在以1(不需要用完所有值1的点)为顶点的正多边形
分析:初步分析数据范围是10的5次方,枚举会超时,但是其实加上正多边形的条件剪枝不会超时。由于n个点已经是均匀分布的所以如果存在正多边形那么边数一定是n的约束(仔细思考),所以约束条件又多了一些
代码:
#include<iostream>
using namespace std;
int main()
{
int n,a[100002];
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n/3;i++){
if(n%i==0){
int j;
for(j=1;j<=i;j++){
int tmp=j;
while(a[tmp]&&n>=tmp) tmp+=i;
if(n<tmp){
cout<<"YES"<<endl;
return 0;
}}
}
}
cout<<"NO"<<endl;
return 0;
}