프로그래밍/알고리즘

개구리 뛰기(codeground)

Hading 2016. 11. 26. 15:03

/*

★그리디 알고리즘을 사용하여 풀었다.★

=백준 점프점프 11060 번 문제와 유사하다.


*/


#include <cstdio>

#include <vector>

using namespace std;

int main() {

int t;

scanf("%d", &t);

for (int tc = 1; tc <= t; tc++) {

int n;

scanf("%d", &n);

vector<int> a(n + 1);

a[0] = 0;

for (int i = 1; i <= n; i++) {

scanf("%d", &a[i]);

}

n += 1;

int k;

scanf("%d", &k);

int ans = 0;

int cur = a[0];

for (int i = 0; i<n - 1; i++) {

if (a[i + 1] - a[i] > k) {

ans = -1;

}

}

if (ans != -1) {

for (int i = 1; i<n; i++) {

if (cur + k < a[i]) {

cur = a[i - 1];

ans += 1;

}

}

ans += 1;

}

printf("Case #%d\n", tc);

printf("%d\n", ans);

}


return 0;

}