1083 是否存在相等的差
题目链接-1083 是否存在相等的差
解题思路
STL,用map记录即可
- key值记录每张牌差值的绝对值,value记录差值出现的次数
- 因为map内的元素时按key值字典序排序,因为要按照差值从大到小输出,所以可用reverse_iterator反向迭代器反向遍历map
- 反向遍历:需要用rbegin()和rend()指出反向遍历的起始位置和终止位置
附上代码
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#define int long long
#define lowbit(x) (x &(-x))
using namespace std;
const int INF=0x3f3f3f3f;
const double PI=acos(-1.0);
const double eps=1e-10;
const int M=1e9+7;
const int N=1e5+5;
typedef long long ll;
typedef pair<int,int> PII;
int a[N];
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
map<int,int> mp;
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
a[i]=abs(a[i]-i);
mp[a[i]]++;
}
for(map<int,int>::reverse_iterator it=mp.rbegin();it!=mp.rend();it++)
if(it->second>1)
cout<<it->first<<" "<<it->second<<endl;
return 0;
}