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" );
    }
}

你可能感兴趣的:(枚举,数论,codeforces)