cf B. Petya and Staircases

6373 ワード

http://codeforces.com/contest/362/problem/B
まずソートして、1番目と最後の1つが汚れているかどうかを判断し、もしそうであればNOを出力し、その中の3つが汚れているかどうかを判断し、もしそうであれば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
"); 27 break; 28 } 29 else if(i==m-1||i==0) 30 { 31 if(a[i]==n||a[i]==1) 32 { 33 printf("NO
"); 34 flag=false; 35 break; 36 } 37 } 38 } 39 if(flag) printf("YES
"); 40 } 41 return 0; 42 }

View Code