LSTTCD2 - Thử thách cực đại - Đá chìm đá nổi 2

Tác giả: hieult

Ngôn ngữ: C++

#include <stdio.h>
//#include <conio.h>

int n,x,y,flag[10001];

void nhayu1(int u)
{
     for(int i = u-2;i>=1;i=i-2)
     {
         printf("L 2\n");
         flag[i] = 1;
     }
     if(u%2==0) {printf("L 1\n"); flag[2] = 1;}
}

void nhay1u(int u)
{
     int t = 1;
     if(flag[2]==0)
     {       t=2;printf("R 1\n") ; flag[2] = 1;}    
     for(int i = t+2;i<=u;i=i+2)
     {
             printf("R 2\n");
             flag[i] = 1;
     }
}

void nhayun(int u)
{
     for(int i = u+2;i<=n;i=i+2)
     {
           printf("R 2\n");
             flag[i] = 1;
     }
     if((n-u)%2 !=0) {printf("R 1\n");flag[n-1] = 1;}
}

void nhaynu(int u)
{
     int t = n;
     if(flag[n-1]==0) 
     {
          t = n-1;printf("L 1\n");flag[n-1] = 1;}
     for(int i = t-2;i>=u;i=i-2)
     {
          printf("L 2\n");
          flag[i] = 1;
     }
}

int TTD(int a)
{
    if(a<0) return -a;
    else return a;
}
int main()
{
    //while (scanf("%d %d %d",&n,&x,&y)>0)
    //{
    scanf("%d %d %d",&n,&x,&y);
    for(int i = 1;i<=n;i++) flag[i] = 0;
    int check = 0;
    if(TTD(x-y)==1) check = 1;
    if(x==1 ||x==n||y==1 ||y==n) check = 0;
    if(x==y) check = 1;
    if(n==1) check = 0;
    if(check == 1)
        printf("-1");
    else 
    {
         flag[x] = 1;
         if(x==y);
         else if(x<y)
         {
              nhayu1(x);if(y!=n &&y==x+1); else nhay1u(x+1); 
              for(int i = x+1;i<y-1;i++)
                 printf("R 1\n");
              if(y==n && y == x+1);else nhayun(y-1);nhaynu(y);
         }
         else
         {
             nhayun(x);if(y!=1&&y==x-1);else nhaynu(x-1);
             for(int i = x-1;i>y+1;i--)
                 printf("L 1\n");
             if(y==1 && x==2);else nhayu1(y+1);nhay1u(y);
         }
         printf("WIN");
    }
  //  }
  //  getch();
}
    
    

Download