在清华举办美食节的某一天的早上10点钟,有N个人试图去生煎包处排队,10点前发生了M个事件,事件大概分为以下4种
- 有人从队尾进入队伍
- 有人插队
- 有人等不及了从队伍中离开
要求10点钟时整个队伍的情况
输入格式:
输入第一行有两个用空格隔开的数N,M
接下来有M行,按时间先后顺序每行表述一个事件
I x:表示编号为x的人从队尾进入队伍
C x y:表示编号为x的人插队,排在y前一位
L x:表示编号为x的人从队伍中离开(这个人有可能还会回来)
我们保证同一时刻队伍里不会出现两个编号相同的人,也不会让没有进入队伍的人离开队伍且数据合法。
输出格式:
输出1行,表示队首到队尾所有人的编号,用空格隔开;如果队伍没有人输出“Bai Ren Zhan”(不含引号)
输入样例:
4 4
I 1
I 2
C 3 2
C 4 1
输出样例:
注意末尾有空格!!!
4 1 3 2
数据规模和约定
N<=100000,M<=100000
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int a[100000];
int main()
{
int n,m;
int x,y;
char c;
int count=0;
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
getchar();
scanf("%c",&c);
if(c=='I')//排在队尾
{
scanf("%d",&x);
a[count]=x;
count++;
}
else if(c=='C')
{
scanf("%d %d",&x,&y);
for(int i=0;i<count;i++)
{
if(a[i]==y)
{
for(int j=count;j>i;j--)
{
a[j]=a[j-1];
}
a[i]=x;
break;
}
}
count++;
}
else if(c=='L')
{
scanf("%d",&x);
for(int i=0;i<count;i++)
{
if(a[i]==x)
{
for(int j=i;j<count-1;j++)
{
a[j]=a[j+1];
}
break;
}
}
count--;
}
}
if(count==0)
{
printf("Bai Ren Zhan\n");
}
else
{
for(int i=0;i<count;i++)
{
printf("%d ",a[i]);
}
}
}
上面那种数组的方法是正确的 可以参考一下
但是 这道题本来是想用链表的方式做的 但是我提交了好几次都是段错误 因为最近在学习链表 还是希望可以灵活运用 希望评论区有大佬可以帮我指出一下错误 万分感谢!!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct student
{
int data;
struct student *next;
}node;
int main()
{
int n,m;
node*p1;
scanf("%d %d",&n,&m);
char c;
int d=0;
int x,y;
node *head=(node*)malloc(sizeof(struct student));
head->next=NULL;
while(m>0)
{
getchar();
scanf("%c",&c);
if(c=='I')//从队尾进入
{
scanf("%d",&x);
node*s=(node*)malloc(sizeof(struct student));//建立新节点
s->data=x;//赋值写在最前
node *q;
q=head;
while(q->next)
{
q=q->next;
}
q->next=s;
s->next=NULL;
d++;
}
else if(c=='C')//插入
{
node*p0=head;
scanf("%d %d",&x,&y);
node *s=(node*)malloc(sizeof(struct student));
s->data=x;
s->next=NULL;
while(p0->next->data!=y)
{
p0=p0->next;
}
if(p0)
{
s->next=p0->next;
p0->next=s;
}
d++;
}
else if(c=='L')//删除(离开)
{
scanf("%d",&x);
node*p=head;
node*q;
q=p->next;
while(q!=NULL)
{
if(p->data==x)
{
p->next=q->next;
free(q);//释放内存
break;
}
p=q;//转置
q=q->next;
}
d--;
}
m--;
}
p1 = head->next;
if(d==0)
{
printf("Bai Ren Zhan\n");
return 0;
}
else
{
while(p1!=NULL)
{
printf("%d ",p1->data);
p1=p1->next;
}
}
return 0;
}