1. 程式人生 > >PAT 1083 是否存在相等的差

PAT 1083 是否存在相等的差

洗牌 pro div 次數 ret amp esp 個數 ace

https://pintia.cn/problem-sets/994805260223102976/problems/994805260780945408

給定 N 張卡片,正面分別寫上 1、2、……、N,然後全部翻面,洗牌,在背面分別寫上 1、2、……、N。將每張牌的正反兩面數字相減(大減小),得到 N 個非負差值,其中是否存在相等的差?

輸入格式:

輸入第一行給出一個正整數 N(2 ≤ N ≤ 10 000),隨後一行給出 1 到 N 的一個洗牌後的排列,第 i 個數表示正面寫了 i 的那張卡片背面的數字。

輸出格式:

按照“差值 重復次數”的格式從大到小輸出重復的差值及其重復的次數,每行輸出一個結果。

輸入樣例:

8
3 5 8 6 2 1 4 7

輸出樣例:

5 2
3 3
2 2

代碼:
#include <bits/stdc++.h>

using namespace std;

const int maxn=1e5+10;
int a[maxn]={0};

int main()
{
    int n;
    scanf("%d",&n);
    int j;
    for(int i=1;i<=n;i++)
    {
        int m;
        scanf("%d",&m);
        j=abs(m-i);
        a[j]++;
    }
    for(int i=10000;i>=0;i--)
    {
        if(a[i]>=2)
            cout<<i<<" "<<a[i]<<endl;
    }
    return 0;
}

  

PAT 1083 是否存在相等的差