[ACM]【prefix】Atcoder 166 This Message Will Self-Destruct in 5s

This Message Will Self-Destruct in 5s

傳送門
題意:一個數列,要求滿足序號差等於值之和的對數。
在這裏插入圖片描述

思路:

Ai+Aj=ijA_i+A_j=i-jAj+j=iAiA_j+j=i-A_i。重點在於兩兩配對的O(n)O(n)代碼操作。

代碼:

#include<bits/stdc++.h>
using namespace std;
const int maxn=200005;
typedef long long ll;
ll a[maxn];
map<ll,int>mp;
int main(){
	ll n;
	scanf("%d",&n);
	for(ll i=1;i<=n;i++){
		scanf("%d",&a[i]);
		if(i>=a[i]) mp[i-a[i]]++;
	}
	ll ans=0;
	for(ll i=1;i<=n;i++){
		ans+=mp[a[i]+i];
	}
	printf("%lld\n",ans);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章