cf B. Petya and Staircases
http://codeforces.com/contest/362/problem/B
先排序,然后判断第一个和最后一个是不是脏的,如果是则输出NO,然后判断其中三个脏的是不是连着的,如果是也输出NO,否则输出YES
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define LL __int64 5 #define maxn 100010 6 using namespace std; 7 8 LL a[maxn]; 9 LL n,m; 10 11 int main() 12 { 13 while(scanf("%I64d%I64d",&n,&m)!=EOF) 14 { 15 for(int i=0; i<m; i++) 16 { 17 scanf("%I64d",&a[i]); 18 } 19 sort(a,a+m); 20 bool flag=true; 21 for(int i=0; i<m; i++) 22 { 23 if(a[i+1]-a[i]==1&&a[i+2]-a[i+1]==1&&i+2<m) 24 { 25 flag=false; 26 printf("NO\n"); 27 break; 28 } 29 else if(i==m-1||i==0) 30 { 31 if(a[i]==n||a[i]==1) 32 { 33 printf("NO\n"); 34 flag=false; 35 break; 36 } 37 } 38 } 39 if(flag) printf("YES\n"); 40 } 41 return 0; 42 }