
题意:给你个数组b,要你要求出来他所能构造的另外一个数组的和,构造条件是用b数组里的数并且b数组里的下标差要等于b数组里值的差,并且必须得是上升序列
思路:
把公式转换一下即可:i-j=bi-bj 并且i>j,交换一下i-bi=j-bj,所以我去数组里找下标和值差中和最多的值输出,注意为负的情况,开longlong
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=2e5+100;
int b[maxn];
signed main()
{
int n,i,j,t;
cin>>n;
map<int ,int >m1;
for(i=1;i<=n;i++)
{
cin>>b[i];
m1[b[i]-i]+=b[i];
}
int ans=0;
for(auto x:m1)
{
ans=max(ans,x.second);
}
cout<<ans<<endl;
return 0;
}
403

被折叠的 条评论
为什么被折叠?



