题目链接:http://www.codeforces.com/problemset/problem/158/D
TAG:搜索 数学
有N【<=20000】个数等距围成一圈,可以删除其中的一些数,使剩下的数围成一个正m【3<=m<=N】边形。求剩下的数的最大值。
VKCUP的一道题。。所以看上去是D其实还是很水。。
枚举N的约数,只有删除某个约数的所有倍数才能使剩下的组成一个正m边形。
然后暴力即可。。【果然很简单么。。】
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int yueshu[20000]={0};
void calcyue(int x)
{
int count=0;
for(int i=1;i<=x/3;i++)
if(!(x%i))
yueshu[++count]=i;
yueshu[0]=count;
}
int num[20001]={0};
main()
{
int n;
int sum[20000]={0};
cin>>n;
calcyue(n);
for(int i=0;i<n;i++)
cin>>num[i];
int maxi=-211111111;
for(int i=1;i<=yueshu[0];i++)
{
memset(sum,0,sizeof(sum));
for(int j=0;j<n;j++)
sum[j%yueshu[i]]+=num[j];
for(int j=0;j<yueshu[i];j++)
maxi=max(maxi,sum[j]);
}
cout<<maxi<<endl;
return 0;
}