codeforces 71C C. Round Table Knights(枚举)

题目链接:

codeforces 71C


题目大意:

一个各个点等距离的原环,有一些好点,问能否只用这些好点构成一个正多边形


题目分析:

首先枚举多边形可能分割的的每部分点的数量,只可能被n整除,那么就是枚举被n整数的数,然后枚举每个循环节里的起点,然后判断能否构成正多边形。复杂度 O(nn)


AC代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define MAX 100007

using namespace std;

int n;
int a[MAX];

int main ( )
{
    memset ( a , 0 , sizeof ( a ));
    while ( ~scanf ( "%d" , &n ) )
    {
        for ( int i = 0 ; i < n ; i++ )
            scanf ( "%d" , &a[i] );
        int x = n;
        bool flag = false;
        for ( int i = 1 ; i <= n/3 ; i++ )
        {
            if ( n%i ) continue;
            for ( int j = 0 ; j < i ; j++ )
            {
                bool mark = true;
                int k = j;
                while ( k < n+i )
                {
                    int x = k%n;
                    if ( !a[x] )
                    {
                        mark = false;
                        break;
                    }
                    k += i;
                }
                if ( mark )
                {
                    flag = true;
                    break;
                }
            }
            if ( flag ) break;
        }
        if ( flag ) puts ( "YES" );
        else puts ( "NO" );
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值