(循环)队列 ALDS1_3_B

循环队列,其实是一种很简单的数据结构,这里用AIZU题目的代码直接带过。

注意:取余的下标可能为负,当时我不知道,以为是在0-man_n-1的区间,其实不然,导致出现了错误。
注意:函数内使用cout的endl不当,程序可能会报错。(‘\n’来代替,就可以避免这个问题,这个endl不只是一个换行而已)

#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

const int max_n=100000+2;
int n,q;

typedef struct Queue_node
{
    char str[12];
    int time;
}Queue_node;
Queue_node Queue[max_n];

int head,tail;

void init()
{
    head=1;
    tail=1;
}

void enqueue(Queue_node x)
{
    Queue[tail]=x;
    tail=(tail+1)%max_n;
    //cout<<(Queue[tail-1].time)<<'\n';
}

Queue_node dequeue(void)
{
    head=(head+1)%max_n;
    return Queue[(head-1+max_n)%max_n];
}

bool isEmpty(void)
{
    return head==tail;
}


int main()
{
    scanf("%d %d",&n,&q);
    init();
    for(int i=0;i<n;++i)
    {
        Queue_node a;
        scanf("%s %d",&a.str,&a.time);
        enqueue(a);
        //cout<<Queue[tail-1].time<<endl;
        //cout<<a.time<<endl;
    }
    int ans=0;
    while(!isEmpty())
    {
        Queue_node x=dequeue();
        if(x.time<=q)
        {
            ans+=x.time;
            printf("%s %d\n",x.str,ans);
        }
        else
        {
            ans+=q;
            x.time-=q;
            enqueue(x);
        }
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值