一本通1332、1334:普通队列

这次我们讲普通的队列问题,不是BFS。

题目:1332、1334

所以我选了1332、1334两道例题,先做解题报告。

由于时间原因,我先放个代码,思路晚点补。

1332:直接模拟,也可以用循环队列做。

#include

using namespace std;

int n,m,k;

int main()

{

  queue q1,q2;

  cin>>n>>m;

  for(int i=1; i<=n; i++) q1.push(i);

  for(int i=1; i<=m; i++) q2.push(i);

  cin>>k;

  while(k--)

  {//每组两人

    cout<

    q1.push(q1.front());

    q2.push(q2.front());//回到队尾

    q1.pop();

    q2.pop();//同时出队

  }//模拟算法,加上“循环队列”思想(其实stl的普通队列的空间跟数组循环队列一样)

  return 0;

}

总结一下,模拟算法,其实很简单,熟练用了queue,就可以了。

循环队列,参见“特殊队列2”,这里就不提了。


1334:也是模拟,其实队列就两大类题:模拟和BFS(宽搜)

#include

using namespace std;

queue q;//定义队列

int n,m,tot;

int main()

{

  cin>>n>>m;

  for(int i=1; i<=n; i++) q.push(i);//入队

  tot=1;

  while(!q.empty())

  {

    if(tot%m==0)//如果到了出队人数

    {

      cout<

      q.pop();//出队

    }

    else

    {

      q.push(q.front());

      q.pop();

      //循环队列思想,每完成一人,把这人放到队尾

      //可以参考1332代码,几乎一样的手法

    }

    tot++;//计数

  }

  cout<

  return 0;

}

总结,模拟类,多按题目顺序来就行了,一般会用的人,不会错。反是高深算法要当心。


我发现呵,似乎大家更爱看知识型的,不爱解题报告,但是解题报告往往是抄代码必备神器。

所以嘛,我会多在解题报告中加上干活型内容。

这次队列题,最大感触是:循环队列思想真够不错的。其实循环队列,完全不必要数组,过了n,变成1,就把头的一扔,尾巴一推,就达成循环队列了。

那么这次就到这里,时间不够,简单一些,望体谅。

你可能感兴趣的:(一本通1332、1334:普通队列)