题解:P1152 欢乐的跳

· · 题解

排序入门题。

题意简述

给出一个序列 a,求此序列相邻两个元素的差是否在 [1, n - 1] 之间。

思路

首先我们能想到桶,但此题 a_i 实在太大了,不能接受。

那我们就先开 b 数组表示相邻两个式子之差,可以得到 b[i] = abs(a[i + 1] - a[i])

然后将 b 数组排序,得到有序数列,最后循环判定 b_i 是否等于 i 即可。

代码

#include<bits/stdc++.h>
using namespace std;

long long a[1005], b[1005];

int main(){
    long long n;
    cin >> n;
    for(int i = 1; i <= n; i++) 
        cin >> a[i];
    for(int i = 1; i < n; i++)
        b[i] = abs(a[i] - a[i + 1]);
    sort(b + 1, b + n);
    for(int i = 1; i < n; i++)
        if(b[i] != i) {
            cout << "Not jolly";
            return 0;
        }
    cout << "Jolly";
    return 0;
}