1414 冰雕
codeforces
基準時間限制:1 秒 空間限制:131072 kb 分值: 20
難度:3級演算法題
白蘭大學正在準備慶祝成立256周年。特別任命副校長來準備校園的裝扮。
校園的中心豎立著n個冰雕。這些雕像被排在乙個等分圓上,因此他們形成了乙個正n多邊形。這些冰雕被順針地從1到n編號。每乙個雕有乙個吸引力t[i].
校長來看了之後表示不滿意,他想再去掉幾個雕像,但是剩下的雕像必須滿足以下條件:
· 剩下的雕像必須形成乙個正多邊形(點數必須在3到n之間,inclusive),
· 剩下的雕像的吸引力之和要最大化。
請寫乙個程式幫助校長來計算出最大的吸引力之和。如果不能滿足上述要求,所有雕像不能被移除。
input
單組測試資料。output第一行輸入乙個整數n(3≤n≤20000),表示初始的冰雕數目。
第二行有n個整數t[1],t[2],t[3],…,t[n],表示每乙個冰雕的吸引力(-1000≤t[i]≤1000),兩個整數之間用空格分開。
輸出答案佔一行。input示例
8output示例1 2 -3 4 -5 5 2 3
61 -2 3 -4 5 -6
149
思路:1、想要在乙個等分圓上取點作為正多邊形,那麼不難想到,其選擇的點的個數一定是n的因子數才行。
2、那麼我們預處理出n的所有因子,接下來考慮:如何確定選擇的每兩個點之間的距離呢?對於n的因子1來講,其能夠確定要選擇n/1=n個點,那麼每兩個點之間的距離為1.
如果對於n的因子2來講,(假設此時n=6),那麼要確定選擇n/2=3個點,那麼每兩個點之間的距離為2.那麼我們不難遞推出,對應乙個因子i,一共要選n/i個點,每兩個點之間距離為i.
3、那麼接下來暴力維護即可,注意省略掉不必要的操作部分,注意初始化要足夠小。
ac**:
#include#include#include#includeusing namespace std;
int yinzi[100040];
int a[200060];
int main()
{ int n;
while(~scanf("%d",&n))
{for(int i=0;i=3)
{int tmp=yinzi[i];
for(int j=0;j
51NOD 1414 冰雕 思維
1.0 秒 131,072.0 kb 20 分 3級題白蘭大學正在準備慶祝成立256周年。特別任命副校長來準備校園的裝扮。校園的中心豎立著n個冰雕。這些雕像被排在乙個等分圓上,因此他們形成了乙個正n多邊形。這些冰雕被順針地從1到n編號。每乙個雕有乙個吸引力t i 校長來看了之後表示不滿意,他想再去掉...
51Nod 1414 冰雕問題
白蘭大學正在準備慶祝成立256周年。特別任命副校長來準備校園的裝扮。校園的中心豎立著n個冰雕。這些雕像被排在乙個等分圓上,因此他們形成了乙個正n多邊形。這些冰雕被順針地從1到n編號。每乙個雕有乙個吸引力t i 校長來看了之後表示不滿意,他想再去掉幾個雕像,但是剩下的雕像必須滿足以下條件 剩下的雕像必...
51nod 1414 冰雕 思路 暴力模擬題
題意是現在有n個雕像把乙個圓等分了,每乙個雕像有乙個吸引力。叫你不移動雕像只去掉雕像讓剩下的雕像還能等分這個圓,求剩下的雕像的吸引力之和的最大值。顯然去掉後剩下雕像的間隔應該是n的因子,因為這樣才能使剩下的雕像等分圓。這道題資料量不大,可以暴力列舉,模擬出每一種情況取最大值就可以了。現在我們分析完這...