首页 > 编程语言 >4.3 提升题 - A One Way In, Two Ways OutC++

4.3 提升题 - A One Way In, Two Ways OutC++

时间:2024-02-21 21:44:42浏览次数:25  
标签:head 4.3 Ways Two queue int tail dqueue size

就是让你判断输入受限的双端队列的输出的正确性。

其实就是模拟双端队列出队的过程,要不左边出队,要不右边出队,而入队已经一定了。

用一个数组模拟输入受限的双端队列就行了。

但是写这题可太难受了,写了我大概2个半小时,各种各种小错误,没考虑周全的地方。

#include<iostream>
using namespace std;

struct node{
    int head;
    int tail;
    int size;
    int queue[1000];
};
typedef struct node dqueue;

void lpop(dqueue& q){
    if(q.size==0) return;
    if(q.size==1){
        q.head=-1;
        q.tail=-1; 
    }else{
        q.head++;
    }
    q.size--;
}

void rpop(dqueue& q){
    if(q.size==0 ) return;
    if(q.size==1){
        q.head=-1;
        q.tail=-1;
    }else{
        q.tail--;
    }
    q.size--;
}

int ltop(dqueue q){
    if(q.size==0) return -1;
    return q.queue[q.head];
}

int rtop(dqueue q){
    if(q.size==0) return -1;
    return q.queue[q.tail];
}

void push(dqueue& q,int x){
    if(q.size==0){
        q.head=0;
        q.tail=0;
        q.queue[q.head]=x;
    }else{
        if(q.head==0){
            for(int i=q.tail;i>=q.head;i--){
                q.queue[i+1]=q.queue[i];
            }
            q.queue[q.head]=x;
            q.tail++;
        }else{
            q.queue[--q.head]=x;
        }
    }
    q.size++;
}

void print(dqueue q){
     for(int i=0;i<10;i++){
         cout << q.queue[i] <<' ';
     }   
    cout <<'\n';
}

int main(){
    /* 测试dqueue功能正确性
    int x;
    while(cin >>x){
        if(x==-1) break;
        if(x==1) lpop(q);
        if(x==2) rpop(q);
        if(x==3||x==4||x==5) push(q,x); 
        for(int i=0;i<=10;i++){
            cout <<q.queue[i]<<' ';
        }
        cout <<'\n';
        cout << ltop(q) <<' ' <<rtop(q) <<'\n';
    }
    */
    int n,k;
    cin >> n >>k;
    int a[10]={0};
    for(int i=0;i<n;i++){
        cin >> a[i];
    }
    while(k>0){   
        dqueue q;
        q.size=0;
        q.head=0;
        q.tail=0;
        int output[10]={0};
        for(int i=0;i<n;i++){
            cin >> output[i];   
        }
        int x=0;
        int tag=0;
        for(int i=0;i<n;i++){
            if(q.size==0){
                push(q,a[x++]);
                //print(q);
            }
            while(ltop(q)!=output[i]&&rtop(q)!=output[i]){ 
                if(x<n){
                     push(q,a[x++]);
                }else{
                    tag=1;
                    break;
                }
            }
            //print(q);
            if(tag==1){
                break;
            }else{
                if(ltop(q)==output[i]){
                    lpop(q);
                }else if(rtop(q)==output[i]){
                    rpop(q);
                }
                //print(q);
            }
        }
        if(tag==1){
            cout <<"no" <<'\n';
        }else{
            cout <<"yes" <<'\n';
        }
        k--;
    }
    return 0;
}

结果:

标签:head,4.3,Ways,Two,queue,int,tail,dqueue,size
From: https://www.cnblogs.com/llllmz/p/18026208

相关文章

  • Rust 编译报 spurious network error (1 tries remaining): [7] Couldn't connect to
    现象:当执行 cargobuild时报类似错误:warning:spuriousnetworkerror(3triesremaining):[7]Couldn'tconnecttoserver(Failedtoconnectto127.0.0.1port8899after2040ms:Couldn'tconnecttoserver);class=Net(12)warning:spuriousnetworkerror......
  • Multi-behavior Recommendation with Graph Convolutional Networks论文阅读笔记
    Abstract传统的推荐模型通常只是要一种类型的用户-项目交互,但是却有着严重的数据稀疏或者冷启动问题。使用多种类型的用户-项目交互的多行为推荐,如点击和收藏,可以作为一种有效的解决方案。早期队多行为推荐的努力未能捕捉到行为对目标行为的不同影响强度。它们还忽略了多行为数据......
  • P2899 [USACO08JAN] Cell Phone Network G
    原题链接题解一开始我想的是每个节点要么建,要么不建,可是这样一来不好转移,因为有如下情况(黑色代表建站)于是我们换一个角度思考,我们发现一个点要能通网,有三种情况:1.自己建站2.儿子建站3.父亲建站Code#definelllonglong#include<bits/stdc++.h>usingnamespacestd;ve......
  • macOS Sonoma 14.3.1 (23D60) 正式版 Boot ISO 原版可引导镜像下载
    macOSSonoma14.3.1(23D60)正式版BootISO原版可引导镜像下载本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。请访问原文链接:https://sysin.org/bl......
  • macOS Sonoma 14.3.1 (23D60) 正式版发布,ISO、IPSW、PKG 下载
    macOSSonoma14.3.1(23D60)正式版发布,ISO、IPSW、PKG下载本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在虚拟机中启动安装。另外也支持在Windows和Linux中创建可引导介质。请访问原文链接:https://sysin.org/blog/ma......
  • 免费工具 Winsw 和 NSSM 适合对服务管理功能有一定要求的用户,且不想花费额外费用;SRVAN
    免费工具:SRVANY:优点:允许将任何可执行文件转换为服务。Windows自带工具,无需额外安装。简单易用,适合基本的服务管理需求。缺点:功能相对简单,不支持高级的服务管理功能。不再得到官方支持和更新,可能存在一些稳定性问题。Winsw:优点:简单易用,提供了一个简单的配置......
  • 【XV6】 networking
    代码:https://github.com/JasenChao/xv6-labs.gitE1000网络设备驱动题目已经在kernel/e1000.c中给出了E1000的初始化函数和发送接收函数,要求完善发送和接收的功能。其他相关的代码,上层的网络协议在kernel/net.c和kernel/net.h中。PCI总线上搜索网卡的代码在kernel/pci.c中://t......
  • Poj 2531 Network Saboteur(DFS+剪枝)
    2531--NetworkSaboteur(poj.org)#include<iostream>#include<cstring>usingnamespacestd;constintN=30;intC[N][N],n,ans;boolgroup[N];voidDFS(intnum,intsum){group[num]=true;inttmp=sum;for(inti=1;i<=n;i++){......
  • [SWPU2019]Network
    [SWPU2019]Network附件是一个txt文件,打开看到都是些数字每一行都只有一个值,63,255,191等等,不难发现,这些值都为2的n次方减去一后的值,此处为TTL加密。TTL加密:简单来说就是,图中63,127,191,255转化为二进制的值分别为00111111,01111111,10111111,11111111。发现只有前两位不同,TTL加密就......
  • 文心一言 VS 讯飞星火 VS chatgpt (198)-- 算法导论14.3 6题
    六、用go语言,说明如何来维护一个支持操作MIN-GAP的一些数的动态集Q,使得该操作能给出Q中两个最接近的数之间的差值。例如,Q=(1,5,9,15,18,22),则MIN-GAP返回18-15=3,因为15和18是Q中两个最接近的数。要使得操作INSERT、DELETE、SEARCH和MIN-GAP尽可能高效,并分析它们的运行时间。文心一言,代......