d097: 10038 - Jolly Jumpers

  1. 1. 內容
  2. 2. 範例輸入
  3. 3. 範例輸出
  4. 4. 想法
  5. 5. 程式碼

CPE 一顆星選集 49 道必考題

題目連結:https://zerojudge.tw/ShowProblem?problemid=d097

內容

給定一長度為 n (n < 3000)之數列,若相鄰兩數之差的絕對值在 1 ~ n-1 皆有(不用照順序),則輸出 Jolly,若否輸出 Not jolly。

第一個整數為 n ,接著為此數列。

範例輸入

4 1 4 2 3
5 1 4 2 -1 6

範例輸出

Jolly
Not jolly

想法

將相鄰兩數之差當陣列索引值紀錄下來,接著從 1 開始遍歷此陣列。

程式碼

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(false), cin.tie(nullptr)
using namespace std;

int main(){
fastio;
int n, mp[3000];
int temp;
bool vis[3000], suc;
while(cin >> n){
memset(vis, 0, sizeof(vis));
for(int i = 0; i < n; ++i) cin >> mp[i];
for(int i = 1; i < n; ++i){
temp = abs(mp[i] - mp[i - 1]);
vis[temp] = true;
}
suc = true;
for(int i = 1; i < n; ++i){
if(!vis[i]){
suc = false;
break;
}
}
if(suc) cout << "Jolly\n";
else cout << "Not jolly\n";
}
}