Codeforces 71C--剪枝

题意:圆上均匀的分布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;
}
时间: 2025-01-11 02:51:56

Codeforces 71C--剪枝的相关文章

Codeforces 71C Round Table Knights

题意:有n个点均匀的分布在圆周上,每个点有0,1两种状态,问你所有 1的点能否主城正多边形. 解题思路:数论 + dp  ,假设可以组成正 t 边形 ,那么 t 一定要是 n的因子 ,又因为如果能组成 正t边形 ,一定能组成 正 2*t 边形,3*t边行等等,所以只需要质因子. 然后用 0 去排除这些质因子是否可行就行了. 解题代码: 1 // File Name: 71c.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月20日 星期五

寒假训练1解题报告

1.CodeForces 92A 给一堆围成圈的小朋友发饼干,小朋友为1~n号,第几号小朋友每次拿多少块饼干,问最后剩多少饼干 #include <iostream> #include <cstdio> using namespace std; int main() { // freopen("a.in" , "r" , stdin); int n , m; while(scanf("%d%d" , &n , &a

codeforces 1072D Minimum path bfs+剪枝 好题

题目传送门 题目大意: 给出一幅n*n的字符,从1,1位置走到n,n,会得到一个字符串,你有k次机会改变某一个字符(变成a),求字典序最小的路径. 题解: (先吐槽一句,cf 标签是dfs题????) 这道题又学到了,首先会发现,从原点出发,走x步,所有的情况都是在一条斜线上的,而再走一步就是下一条斜线.所以用两个队列进行bfs(把当前步和下一步要处理的字符分开). 到了这里思路就明朗了,每次走的时候如果本身的map里是a就直接走,不是a就看k是否大于0,再看这个字符是不是比答案串里对应位置的字

Codeforces Round #544 (Div. 3) C. Balanced Team [暴力剪枝]

You are a coach at your local university. There are n n students under your supervision, the programming skill of the i i -th student is a i ai . You have to create a team for a new programming competition. As you know, the more students some team ha

CodeForces 837F - Prefix Sums | Educational Codeforces Round 26

按tutorial打的我血崩,死活挂第四组- - 思路来自FXXL /* CodeForces 837F - Prefix Sums [ 二分,组合数 ] | Educational Codeforces Round 26 题意: 设定数组 y = f(x) 使得 y[i] = sum(x[j]) (0 <= j < i) 求初始数组 A0 经过多少次 f(x) 后 会有一个元素 大于 k 分析: 考虑 A0 = {1, 0, 0, 0} A1 = {1, 1, 1, 1} -> {C(

Codeforces 484B Maximum Value(高效+二分)

题目链接:Codeforces 484B Maximum Value 题目大意:给定一个序列,找到连个数ai和aj,ai%aj尽量大,并且ai≥aj 解题思路:类似于素数筛选法的方式,每次枚举aj,然后枚举k,每次用二分找到小于k?aj并且最大的ai,维护答案,过程中加了一些剪枝. #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn =

Codeforces 626F Group Projects(滚动数组+差分dp)

F. Group Projects time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output There are n students in a class working on group projects. The students will divide into groups (some students may be in g

Codeforces 484B Maximum Value(排序+二分)

题目链接: http://codeforces.com/problemset/problem/484/B 题意: 求a[i]%a[j] (a[i]>a[j])的余数的最大值 分析: 要求余数的最大值非常明显a[i]越接近a[j]的倍数则余数越大 ,因此我们将全部的元素从大到小排序 : 然后枚举a[j]的倍数 ,二分查找小于a[i]倍数的最大值,然后更新余数的最大值. 代码例如以下: #include <iostream> #include <cstdio> #include

CF489_D_剪枝

题目链接:http://codeforces.com/problemset/problem/489/D 题意:给你一个图 让你求里面菱形的个数,菱形如下图 思路:类似于floyd,枚举点a和点c. 注意:题目里面点的个数为3000,边的个数为30000,做一个剪枝,复杂度为O(nm+(n-√m)n). 好吧,我还是不会算复杂度...明天写一下vector...待更新~~~ #include<cstdio> #include<iostream> #include<cstring

第二十次codeforces竞技结束 #276 Div 2

真是状况百出的一次CF啊-- 最终还Unrated了,你让半夜打cf 的我们如何释怀(中途茫茫多的人都退场了)--虽说打得也不好-- 在这里写一下这一场codeforces的解题报告,A-E的 题目及AC代码,部分题目有简单评析,代码还算清晰,主要阅读代码应该不难以理解. Questions about problems # Author Problem When Question Answer       2014-11-05 21:24:38 Announcement General ann