题目描述
解题思路
由于要求删除后仍然是一个正多边形,这就保证剩余的点数一定是n的因子,只有这样才能均匀删
除。
所以我们只需要枚举n的因子作为剩余多边形的顶点数,对答案取
m
a
x
max
max即可。
一个数的因子数个数是log级别的,而且每次选择魔法阵的时候每个点只属于当前因子的某一个魔
法阵,所以每个点只访问一次,所以总复杂度为
O
(
n
l
o
g
n
)
.
O(nlogn).
O(nlogn).
代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<cmath>
using namespace std;
long long n,maxn,ans,t[30000];
int main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&t[i]);
ans+=t[i];
}
if(n==4)
{
printf("%lld",ans);
return 0;
}
for(int i=2;i*3<=n;i++)
{
if(n%i==0)
{
for(int j=1;j<=i;j++)
{
maxn=0;
for(int k=j;k<=n;k+=i)
maxn+=t[k];
ans=max(ans,maxn);
}
}
}
printf("%lld",ans);
}