题目链接:
https://pintia.cn/problem-sets/994805260223102976/problems/994805260780945408
AC代码:
#include <iostream>
#include <cctype>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstdlib>
#include <sstream>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <cstring>
using namespace std;
const int maxn=10010;
int a[maxn];
int main(){
int N;
set<int> s;
map<int,int,greater<int> > m;
scanf("%d",&N);
for(int i=1;i<=N;i++){
scanf("%d",&a[i]);
int tmp=abs(i-a[i]);
m[tmp]++;
}
for(map<int,int,greater<int> >::iterator it=m.begin();it!=m.end();it++){
if(it->second > 1)//出现一次,不叫重复一次,第一次仅得3分
cout<<it->first<<" "<<it->second<<endl;
}
}
二刷:
#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=10010;
int a[maxn];
int main(){
int N;
map<int,int,greater<int> > m;
scanf("%d",&N);
for(int i=1;i<=N;i++){
int tmp;
scanf("%d",&tmp);
int res=abs(tmp-i);
m[res]++;
}
for(map<int,int,greater<int> >::iterator it=m.begin();it!=m.end();it++){
if(it->second>1)
printf("%d %d\n",it->first,it->second);
}
}