stl之队列(舞会)

蒟蒻第一次发题解,有不足的还希望大牛指出。

【2018冬令营队列】舞会
题目描述

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴,每跳完一曲即回各自队尾继续等待。规定每个舞曲只能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。

输入

第一行男士人数m和女士人数n(m <= 1000, n <= 1000);
第二行舞曲的数目k(k <= 1000)。

样例

输入:

2 4
6
输出:

1 1
2 2
1 3
2 4
1 1
2 2
这是一道非常基本的队列问题。

什么叫做队列?

举个栗子:就像去食堂打饭,先去的人总会是先打完,也是先出来的。(除了插队以外QAQ)

总结:队列特点:先进先出。

队列的好处

虽然可以用数组来模拟,但是队列的简洁程度比数组高。

效率也比数组高一点点。

队列的用法

定义一个队列queueq;放入队列:q.push();查看队首q.front();队尾:q.back();弹出:q.pop();

q.empty()=q.size()==0.

那么这道题就非常简单了。只需要输出在2个队列里,在次数以内的每一个队首的值即可。但是不要忘了更新和弹出。

上代码:

code:

这是队列的写法。

#include<bits/stdc++.h>

using namespace std;

queueq1,q2;

int main(){

int n,m,k;

cin>>n>>m>>k;

for(int i=1;i<=n;i++){

q1.push(i);

}

for(int i=1;i<=m;i++){

q2.push(i);

}

for(int i=1;i<=k;i++){

cout<<q1.front()<<’ '<<q2.front()<<endl;

q1.push(q1.front());

q1.pop();

q2.push(q2.front());

q2.pop();

}

return 0;

}

这是数组的写法。​​​​​​​

#include<bits/stdc++.h>
using namespace std;
int m,n,k,a=1,b=1;
int main(){
    cin>>m>>n>>k;
    for(int i=1;i<=k;i++){
        cout<<a<<" "<<b<<endl;
        ++a; 
        ++b;
        if(am+1) a=1;
        if(b
n+1) b=1;
    }
    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值