题目

思路
由题意可知需要按差值排序,所以我想到了用集合set(可以自动排序且去重)。
我也看了其他博主的代码,也可以利用map容器、以及不用stl的容器,通过散列遍历(可以参考柳神的)
AC代码
#include<bits/stdc++.h>
using namespace std;
int main(){
int n; cin>>n;
int a[n]={0};
int cha[10001]={0};//记录差值出现的次数
set<int> st;
for(int i=1;i<=n;i++){
cin>>a[i];
cha[abs(i-a[i])]++;
st.insert(abs(i-a[i]));
}
set<int> :: iterator it=st.end();
for(it--;it!=st.begin();it--) {
if(cha[*it]>1){
cout<<*it<<' '<<cha[*it]<<endl;
}
}
if(cha[*it]>1){
cout<<*it<<' '<<cha[*it]<<endl;
}
return 0;
}
本文介绍了一种使用C++解决特定问题的方法,即按元素与其下标的差值进行排序,并通过集合(set)实现自动排序与去重。文章详细展示了如何利用STL容器如set和map,以及如何通过散列遍历来解决问题。代码示例清晰地说明了算法思路和实现细节。

被折叠的 条评论
为什么被折叠?



