codeforce B. Journey Planning

题意:
输入一个数n,接下来输入n个数,b[i]表示的是美丽值。她所经过的城市的路线必须满足b[j]-b[i]=j-i。问最大的美丽值是多少。
思路:
只要你稍微动一下你的笔,你就会发现,要想满足b[j]-b[i]=j-i,那移项之后就是b[j]-j=b[i]-i,所以说我们只要储存b[i]-i累加的值,直接线性寻找就可以了。
代码:

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int a[N];
int b[N];
int main()
{
	int n;
	cin >> n;
	map<int , long long int> mp;
	map<int , long long int>::iterator z;
	for(int i = 1 ; i<= n ; i++)
	{
		cin >> a[i];
		b[i] = a[i] - i;
	}
	for(int i = 1 ; i <= n ; i++)
	{
		mp[b[i]]=mp[b[i]]+(long long int)a[i];
	}
	long long int ans = 0;
	for(z = mp.begin() ; z!=mp.end() ; z++)
	{
		ans = max(ans , z->second);
	}
	cout << ans << endl;
	mp.clear();
	return 0;
}
发布了107 篇原创文章 · 获赞 3 · 访问量 7101

猜你喜欢

转载自blog.csdn.net/qq_43504141/article/details/104617941
今日推荐