[ABC128F] Frog Jump

发布时间 2023-04-26 19:58:36作者: OIerBoy

2023-01-14

题目传送门

翻译

难度&重要性(1~10):5

题目来源

AtCoder

题目算法

数学,模拟

解题思路

把(A-B)看为一步。应为最后必须落在N-1,所以可以将其分为两个序列:
\((A+B),2\times(A+B),3\times(A+B),\cdots N-1-2\times(A+B),N-1\)
然后用前缀和和后缀和得到答案。

完成状态

已完成

Code

#include<bits/stdc++.h>
using namespace std;
long long n,ans,a[100001];
int main(){
	cin>>n;
	for(int i=0;i<n;++i) cin>>a[i];
	for(int i=1;i<n;++i){
		long long sum=0;
		for(int j=1;j<=(n-1)/i;++j){
			int tmp=(n-1)-j*i;
			if(tmp<=i) break;
			if(!(tmp%i)&&tmp/i<=j) break;
			sum+=a[i*j]+a[tmp];
			ans=max(ans,sum);
		}
	}
	cout<<ans;
	return 0;
}