题目链接:http://codeforces.com/problemset/problem/362/B
题目大意:一个小男孩要上楼梯,他一次可以走1个台阶或2个台阶或3个台阶,但是有一些台阶是脏的,他不想走在脏台阶上。一共有n个台阶和m个脏台阶,他最开始在第1个台阶上,要走到第n个台阶。问小男孩能不能不踩到脏台阶的前提下走到n个台阶。
题目思路:对m个脏台阶进行排序,先判断第1个台阶和第n个台阶是不是脏台阶,再判断存不存在连续3个脏台阶。
AC代码:
// Codeforces
// 362B.cpp
/*
ID: Firwaless
LANG: C++
TASK: Petya and Staircases
*/
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
bool flag = 0;
int n, m, i;
int a[3005] = {0};
scanf("%d%d", &n, &m);
for (i = 0; i < m; i++)
{
scanf("%d", &a[i]);
}
sort(a, a + m);
/* 第一个或最后一个是脏楼梯 */
if (a[0] == 1 || a[m - 1] == n)
{
flag = 1;
}
/* 存在连续3个或以上的脏楼梯 */
for (i = 2; i < m; i++)
{
if (a[i - 2] + 2 == a[i - 1] + 1 && a[i - 1] + 1 == a[i])
{
flag = 1;
}
}
puts(flag ? "NO" : "YES");
return 0;
}