1. 程式人生 > >P4889 kls與flag

P4889 kls與flag

題目大意:

有nn個OI選手,每個人插了一個flag。有一天因為某種原因,flag都被觸發了,所以地上有一排nn根竹竿,竹竿的間距均為一個單位長度,高度在1\sim m1∼m之間。

kls看到這些竹竿,感覺不好看,於是準備把它們全部放倒。

在這之前,kls想到了一個數學問題。每根竹竿可以往左倒或者往右倒。如果兩根竹竿在選擇方向放倒之後,它們的頂端可以重合,那麼稱它們是優秀的。現在kls想要知道,有多少對竹竿是優秀的。

思路:

很簡單了,雜湊,map,排序都可以寫,因為是為了寫一題map來豐富一下我的分類,所以就這麼簡單了。

程式:

#include<map>
#include<string.h>
#include<cstdio>
#include<cstdlib>
#define LL long long
using namespace std;
map<int,int> a;
int n,m,x;
LL ans;
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++) {
		scanf("%d",&x);
		ans+=a[i+x]+a[i-x];
		a[i+x]++;
		a[i-x]++;
	}
	printf("%lld",ans);
}