1 条题解

  • 0
    @ 2024-3-12 20:50:08

    算是学习 bfs 前对 queue 的应用吧。

    由于男、女都是周而复始地入队,就可以把它看作一个队列,每次取出队头,接着删除队头,把队头插入队尾。

    想通之后,代码就很容易实现了:

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    #define rep(i,x,y) for(int i=x;i<=y;i++)
    #define rrep(i,x,y) for(int i=x;i>=y;i--)
    #define sc scanf
    #define pr printf
    #define max(a,b) a>b?a:b
    #define endline pr("\n")
    inline int read(){int s=0,w=1;char c=getchar();while(!isdigit(c)){if(c=='-') w=-1;c=getchar();}while(isdigit(c)){s=(s<<1)+(s<<3)+(c^48);c=getchar();}return s*w;}
    
    int b,g,k;
    queue <int> boy,girl;
    
    signed main(){
      b=read();g=read();
      k=read();
      rep(i,1,b) boy.push(i);
      rep(i,1,g) girl.push(i);
      rep(i,1,k){
        int t_boy=boy.front(),t_girl=girl.front();
        pr("%3lld%3lld\n",t_boy,t_girl);//注意场宽为 3,但是不能输出 2 个空格(被坑了 N 次)。
    
        boy.push(t_boy);//入队(先入队还是出队无所谓)。
        girl.push(t_girl);
        boy.pop();girl.pop();//出队。
    
      }
      return 0;
    }
    
    • 1

    信息

    ID
    69
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    161
    已通过
    57
    上传者