1083 是否存在相等的差 - PAT (Basic Level) Practice (中文) (pintia.cn)
自己写的STL写法,一遍过:
#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
const int N=1e5+10;
int a[N];
int sub[N];
map<int,int>m;
struct CMP
{
bool operator()(pair<int,int>&a,pair<int,int>&b)
{
return a.first>b.first;
}
};
int main()
{
int n=0;cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
sub[i]=abs(a[i]-i);
m[sub[i]]++; //用一个哈希存储到差值和对应的个数关系
}
vector<pair<int,int>> v(m.begin(),m.end());
sort(v.begin(),v.end(),CMP()); //排个序,按招first降序输出
for(auto ch:v)
{
if(ch.second>=2)
cout<<ch.first<<" "<<ch.second<<endl;
}
return 0;
}
其实是我搞复杂了,不用开哈希map,开个数组哈希就可以了:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10005]={0};
int n;cin>>n;
for(int i=1;i<=n;i++)
{
int temp;cin>>temp;
a[abs(temp-i)]++;
}
for(int i=n;i>=0;i--)
{
if(a[i]>1)cout<<i<<" "<<a[i]<<endl;
}
return 0;
}