51NOD 1414 冰雕(暴力)

传送门

白兰大学正在准备庆祝成立256周年。特别任命副校长来准备校园的装扮。

校园的中心竖立着n个冰雕。这些雕像被排在一个等分圆上,因此他们形成了一个正n多边形。这些冰雕被顺针地从1到n编号。每一个雕有一个吸引力t[i].

校长来看了之后表示不满意,他想再去掉几个雕像,但是剩下的雕像必须满足以下条件:

· 剩下的雕像必须形成一个正多边形(点数必须在3到n之间,inclusive),

· 剩下的雕像的吸引力之和要最大化。

请写一个程序帮助校长来计算出最大的吸引力之和。如果不能满足上述要求,所有雕像不能被移除。

Input

单组测试数据。

第一行输入一个整数n(3≤n≤20000),表示初始的冰雕数目。

第二行有n个整数t[1],t[2],t[3],…,t[n],表示每一个冰雕的吸引力(-1000≤t[i]≤1000),两个整数之间用空格分开。

Output

输出答案占一行。

Input示例

8

1 2 -3 4 -5 5 2 3

6

1 -2 3 -4 5 -6

Output示例

14

9

样例解释:

第一个:

选取的是 2 4 5 3构成的是正四边形。最大的吸引力是14

第二个:

选取的是 1 3 5构成的是正三角形。最大的吸引力是9

解题思路:

就是暴力枚举一下等距离的点的和的最大值,需要注意的是,点数不能<3,因为<3构不成多边形,然后每次枚举n的约数就行了。

My Code:

#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 2e4+5;
int a[MAXN];
int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        int Max = -99999999;
        for(int i=1; i<=n/3; i++)
        {
            if(n%i == 0)
            {
                for(int j=0; j<i; j++)
                {
                    int sum = 0;
                    for(int k=j; k<n; k+=i)
                        sum += a[k];
                    if(sum > Max)
                        Max = sum;
                }
            }
        }
        cout<<Max<<endl;
    }
    return 0;
}
时间: 2024-11-05 16:42:02

51NOD 1414 冰雕(暴力)的相关文章

1414 冰雕 51nod 暴力

1414 冰雕 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  关注 白兰大学正在准备庆祝成立256周年.特别任命副校长来准备校园的装扮. 校园的中心竖立着n个冰雕.这些雕像被排在一个等分圆上,因此他们形成了一个正n多边形.这些冰雕被顺针地从1到n编号.每一个雕有一个吸引力t[i]. 校长来看了之后表示不满意,他想再去掉几个雕像,但是剩下的雕像必须满足以下条件: ·        剩下的雕像必须形成一个正多边形(点数

51Nod-1414-冰雕

51Nod-1414-冰雕 1414 冰雕 白兰大学正在准备庆祝成立256周年.特别任命副校长来准备校园的装扮. 校园的中心竖立着n个冰雕.这些雕像被排在一个等分圆上,因此他们形成了一个正n多边形.这些冰雕被顺针地从1到n编号.每一个雕有一个吸引力t[i]. 校长来看了之后表示不满意,他想再去掉几个雕像,但是剩下的雕像必须满足以下条件: ·        剩下的雕像必须形成一个正多边形(点数必须在3到n之间,inclusive), ·        剩下的雕像的吸引力之和要最大化. 请写一个程序

51nod 1094 和为k的连续区间(暴力和map优化)

题目意思: http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1094 一整数数列a1, a2, ... , an(有正有负),以及另一个整数k,求一个区间[i, j],(1 <= i <= j <= n),使得a[i] + ... + a[j] = k. Input 第1行:2个数N,K.N为数列的长度.K为需要求的和.(2 <= N <= 10000,-10^9 <= K <= 10^9

51nod 1732 婚姻介绍所 (暴力 / DP)

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1732 题目: 51nod除了在做OJ之外,还开展了很多副业.婚姻介绍所就是其中之一. 对于一个客户,我们可以使用一个字符串来描述该客户的特质. 假设现在我们有两个客户A和B. A的特质字符串为:abcdefg B的特质字符串为:abcxyz 则A和B的匹配度f(A, B)为A和B的最长公共前缀的长度,即len('abc') = 3 由于最近51nod经费紧张,

[51nod] 1267 4个数和为0 暴力+二分

给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 <= N <= 1000) 第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9) Output 如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No". Input示例 5 -1 1 -5 2 4 Output

51nod 1116 K进制下的大数 (暴力枚举)

题目链接 题意:中文题. 题解:暴力枚举. #include <iostream> #include <cstring> using namespace std; const int MAXS = 1e5 + 10; const int MAXK = 36; char num[MAXS]; int main(int argc, const char * argv[]) { while (cin >> num) { int sum = 0; int len = (int)

51nod——1285 山峰和分段(暴力出奇迹)

要求每段的点数都一样,因此分的段数cnt肯定是n的因子,要求每段都有山峰,因此cnt肯定小于等于山峰数量.分段的宽度d=n/cnt,对山峰数量做一个前缀和,检查一下每一段的山峰数量是否没有增加即可. 1 ///暴力枚举段数 2 #include <bits/stdc++.h> 3 using namespace std; 4 #define maxn 50050 5 int high[maxn],num[maxn]; 6 7 int main(){ 8 std::ios::sync_with_

CodeForces 558 C. Amr and Chemistry &amp;&amp; 51NOD 1483 化学变换(暴力 + 贪心)

传送门 Amr loves Chemistry, and specially doing experiments. He is preparing for a new interesting experiment. Amr has n different types of chemicals. Each chemical i has an initial volume of ai liters. For this experiment, Amr has to mix all the chemic

51nod 1217 Minimum Modular(数论+暴力)

N个不同的数a[1],a[2]...a[n],你可以从中去掉K个数,并且找到一个正整数M,使得剩下的N - K个数,Mod M的结果各不相同,求M的最小值. Input 第1行:2个数N, K,中间用空格分隔,N表示元素的数量,K为可以移除的数的数量(1 <= N <= 5000, 0 <= K <= 4, 1 <= a[i] <= 1000000). Output 输出符合条件的最小的M. Input示例 5 1 1 2 10 11 12 Output示例 4----