M. Managing Difficulties
链接:https://www.jisuanke.com/contest/9032/challenges
题意:给定 n 个数,问有多少个三元组满足: i < j < k , a j − a i = a k − a j i < j < k ,a_j-a_i=a_k-a_j i<j<k,aj−ai=ak−aj。 ( 1 ≤ n ≤ 2000 ) (1\le n \le 2000) (1≤n≤2000)
思路:枚举 i i i 和 j j j ,然后在 map 中查询符合条件的 a k a_k ak 的数量,累积答案。特别卡常
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=2000+10,maxm=1e7+10;
int t,n,a[maxn];
unordered_map<int,int> mp;
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]);
mp.clear();
int ans=0;
for(int i=1;i<=n;++i)
{
for(int j=i+1;j<=n;++j)
{
int ak=2*a[i]-a[j];
if(!m.count(ak)) continue;//不加这一句就会T
ans+=mp[ak];
}
mp[a[i]]++;
}
printf("%d\n",ans);
}
return 0;
}