问题 A: 魔法阵

思绪不断阻挡着回忆播放,盲目的追寻仍然空空荡荡,灰蒙蒙的夜晚睡意又不知躲到哪去,一转身孤单已躺在身旁。

题目描述

小Biu潜心学习魔法,他发现魔法阵一定是一个正多边形(边数至少为3),而且正多边形的每个点上都有一个魔力值,整个魔法阵的魔力值就是正多边形的顶点上每个魔力值的和,现在小Biu有一个正n边形魔法阵,小Biu可以删掉这个魔法阵上的一些点,但是要保证删除之后这仍是一个魔法阵,也就是说删除一些点之后,剩余点仍然可以组成一个正多边形(边数至少为3),问小Biu能得到的魔力值最大的魔法阵的魔力值是多少?;

 

输入

第一行输入一个整数n(3≤n≤20000),表示初始的魔法阵的顶点个数。 
第二行有n个整数t[1],t[2],t[3],…,t[n],表示每一个顶点的魔力值(-1000≤t[i]≤1000),两个整数之间用空格分开。

输出

输出答案占一行。

样例输入 Copy

8 
1 2 -3 4 -5 5 2 3

样例输出 Copy

14

提示

样例中,可以去掉1,3,5,7四个点,剩余四点构成正方形,魔力值分别为2,4,5,3,此时总魔力值最大为14。

对于20%的数据,n<=20 
对于40%的数据,n<=2000 
对于100%的数据, n<=20000

题目解析:

首先,不难发现要想构成正多边形,就是隔点取,至于怎么隔点,画图可以看出,取n的因子就行,所以,我打了表,求了n的因子,然后就是对每隔因子求和。不太好说,因子是几,就能取多少种情况。

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,t[20010],ys[20010],sum,ct;
void db(int x)
{
    for(int i=2; i>n;
    for(int i=1; i<=n; i++)
    {
        cin>>t[i];
        sum+=t[i];
    }
    db(n);
    if(n==3||ct==0)
        cout<=3)
                    mx=max(mx,jg);
                tt++;
            }
        }
        cout<

 

你可能感兴趣的:(石油大学)