hdu-1276-士兵队列训练问题

#include
#include
#include
#include
struct queue
{
 int capacity;
 int size;
 int *array;
 int tail;
 int end;
};
int add(queue *q,int value)
{
 q->array[q->end]=value;
 q->end++;
 q->size++;
 return value;
}
int peek(queue *q)
{
 return q->array[q->tail];
}
int pull(queue *q)
{
 int value=q->array[q->tail];
 q->array[q->tail]=0;
 q->tail++;
 q->size--;
 return value;
}
int get_size(queue *q)
{
 return q->size;
}
int get_capacity(queue *q)
{
 return q->capacity;
}
int init_queue(queue *q,int capacity)
{
 q->capacity=capacity;
 q->size=0;
 q->tail=0;
 q->end=0;
 q->array=(int *)malloc(capacity*sizeof(int));
 memset(q->array,0,sizeof(q->array));
 return 1;
}
int init_queue(queue *q)
{
 q->size=0;
 q->tail=0;
 q->end=0;
 return 1;
}
int free_queue(queue *q)
{
 free(q);
 return 1;
}
int main()
{
 queue* sq=NULL;
 queue* eq=NULL;
 int s,n,i,j,num=2;
 scanf("%d",&s);
 while(s--)
 {
  sq=(queue*)malloc(sizeof(queue));
  eq=(queue*)malloc(sizeof(queue));
  scanf("%d",&n);
  init_queue(sq,n);
  init_queue(eq,n);
  for(i=1;i<=n;i++)
   add(sq,i);
  num=2;
  while(n>3)
  {
   i=1;
   if(num==2)
   {
    while(sq->size>0)
    {
     if(i!=num)
     {
      add(eq,pull(sq));
      i++;
     }
     else
     {
      pull(sq);
      i=1;
     }
    }
    if(eq->size<=3)
     break;
    num=3;
    init_queue(sq);
   }
   else if(num==3)
   {
    while(eq->size>0)
    {
     if(i!=num)
     {
      add(sq,pull(eq));
      i++;
     }
     else
     {
      pull(eq);
      i=1;
     }
    }
    if(sq->size<=3)
     break;
    num=2;
    init_queue(eq);
   }
  }
  if(eq->size==0)
  {
   while(sq->size>1)
   printf("%d ",pull(sq));
   printf("%d\n",pull(sq));
  }
  else
  {
   while(eq->size>1)
    printf("%d ",pull(eq));
   printf("%d\n",pull(eq));
  }
  free(sq);
  free(eq);
 }
 return 0;
}

你可能感兴趣的:(hdu-1276-士兵队列训练问题)