Contest1030 - 2017级新生周赛(三)E

1325 Problem  E

题目描述

啊啊啊,又是喜闻乐见的英灵召唤环节了,只不过这次的英灵召唤有些许的不一样,这次我们不再是通过圣遗物召唤了,而是通过一些蕴含着魔力的宝石来召唤英灵,现在在地上摆着n个魔法宝石,这些宝石被排在一个等分的圆上,所以他们形成了一个正n多边形(一个合格的魔法阵必须是正多边形哦),这些宝石被顺时针的从1到n编号,每个宝石都有一个能量a[i]。

那么问题来了,地上的宝石有一部分被圣杯污染了,其中的魔力变成了负数,但是我们召唤出的英灵强弱,和地上所有宝石的魔力值的和有关,魔力值的和越大,召唤出的英灵越强,所以我们可能要拿走一部分被污染的宝石。但是要求还留在地上的宝石必须仍然构成一个正多边形,才能召唤出英灵。并且地上剩余宝石的能量和越大,召唤出的英灵越强。因为可能性实在太多了现在就请你写个程序来帮助master计算出怎样选择,才能召唤出最强的英灵,并且输出此时地上宝石的能量和

输入

第一行,一个整数n,代表刚开始是地上宝石的数量
数据范围:(3 <= n <= 20000)
第二行,n个整数a[1], a[2], a[3],...a[n],表示每个宝石蕴含的能量
数据范围: (-1000 <= a[i] <= 1000)

输出

一个数字,召唤出最强英灵时,地上宝石的能量和

样例输入

8
1 2 -3 4 -5 5 2 3

样例输出

14

提示

样例:最优时,地上剩余宝石能量分别为,2, 4, 5, 3。构成一个正4边形,能量和为14

import java.util.Scanner;

public class Yingling {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int a[] = new int[n];
		int max = 0;
		
		for (int i = 0; i < a.length; i++) {
			a[i] = sc.nextInt();
		}
		
		int temp = 0;
		if(n%2==0)
			temp = 2;
		else
			temp = 3;
		for (int i = temp; i < a.length; i += 2) {
			for (int j = 0; j < temp; j++) {
				int tt = 0;
				for (int j2 = j; j2 < a.length; j2 += temp) {
					tt += a[j2];
				}
				max = Math.max(tt, max);
			}
			if(n/i<=3) {
				break;
			}
		}
		
		System.out.println(max);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_39507723/article/details/83473274