1. 程式人生 > >2017級新生周賽(三)E

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);
	}
}