第一题 队列
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int q[N];
int front=1,rear=0;
int main()
{
int op;cin>>op;
while(op--)
{
string a;cin>>a;
if(a=="push")
{
int idx;cin>>idx;
q[++rear]=idx;
}
else if(a=="query")
{
int idx;cin>>idx;
cout<<q[front+idx-1]<<endl;
}
else front++;
}
return 0;
}
第二题 队列练习(又是被卡cin的一天
#include<bits/stdc++.h>
using namespace std;
const int N=200010;
int q[N];
int front=1,rear=0;
int main()
{
int num,op;
scanf("%d%d",&num,&op);
q[++rear]=num;
while(op--)
{
q[++rear]=2*q[front];
q[++rear]=2*q[front]+1;
printf("%d\n",q[front]);
++front;
}
return 0;
}
第三题 数字统计
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int q[N];
int front=1,rear=0;
int main()
{
int n,idx;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&idx);
q[++rear]=idx;
}
for(int i=1;i<=rear; i++)
{
while(q[front]<(q[i]-5)&&front<i) front++;
if(i==1)
printf("0 ");
else printf("%d ",i-front);
}
return 0;
}
第四题 排队买票
#include<bits/stdc++.h>
using namespace std;
const int N=1000001;
int a[1001],b[1001],q[N];
int front=1,rear=0;//a数组记录的是每个人的需求 b数组记录的是每个人买票的时间,q队列就是排队
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);//读入每个人要几张票
q[++rear]=i;//队列不一定记录的是票数 也可以是每个人当前的位置
}
int cnt = n;//表示还有多少人没有买完票
for(int i=1;cnt;i++)
{
--a[q[front]];//队头人的需求减一
if(!a[q[front]])
cnt--,b[q[front]]=i;//队头人满足需求 i就是时间
else q[++rear]=q[front];//否则的话 第一个人到最后继续排队
++front;
}
for(int i=1;i<=n;i++)
{
printf("%d ",b[i]);
}
}