洛谷题单指南-排序-P1152 欢乐的跳

原题链接:https://www.luogu.com.cn/problem/P1152

题意解读:要判断相邻数差的绝对值是否覆盖1~n-1,只需遍历相邻两数之差,借助数组标记差的绝对值是否存在,然后遍历数组即可。

解题思路:

此题有两个注意点:

1、数值要用long long

2、计算差值绝对值后,标记桶数组时,有可能导致越界,因为每个元素范围 [−108,108]

100分代码:

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

const int N = 1005;

long long a[N];
int h[N];
int n;

int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> a[i];
    
    for(int i = 2; i <= n; i++) 
    {
        int v = abs(a[i] - a[i - 1]); //注意两数之差有可能超过数组最大长度而导致越界
        if(v < n) h[v] = 1; //只记录两数差的绝对值在1~n-1的即可
    }

    bool flag = true;
    for(int i = 1; i <= n - 1; i++)
    {
        if(h[i] == 0) 
        {
            flag = false;
            break;
        }
    }

    if(flag) cout << "Jolly";
    else cout << "Not jolly";

    return 0;
}

 

posted @ 2024-01-30 11:12  五月江城  阅读(74)  评论(0编辑  收藏  举报