标签:codeforces 剪枝
题意:圆上均匀的分布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; }
标签:codeforces 剪枝
原文地址:http://blog.csdn.net/ac_0_summer/article/details/45847379