这到题目用到了栈和队列
#include "stdio.h"
#include "stdlib.h"
typedef struct queue{
int data;
struct queue* next;
}queue;
typedef struct goods{
queue*front;
queue*rear;
int ans;
}goods;
typedef struct car{
int *last;
int*top;
}car;
int main(void)
{
int num,n,s,q;
int i,i_1,n_1,time,flag;
goods* good;
queue *base,*goon;
car carcar;
scanf("%d",&num);
while (num--) {
scanf("%d %d %d",&n,&s,&q);
good=(goods*)malloc(n*sizeof(goods));
for (i=0,time=0; i<n; i++) {
scanf("%d",&n_1);
base=(queue*)malloc(sizeof(queue));
good[i].front=good[i].rear=base;
good[i].front->next=NULL;
good[i].ans=0;
for (i_1=1; i_1<=n_1; i_1++) {
goon=(queue*)malloc(sizeof(queue));
base->next=goon;
scanf("%d",&goon->data);
goon->next=NULL;
good[i].rear=goon;
base=base->next;
good[i].ans++;
}
}//数据输入完成
carcar.last=(int *)malloc(s*sizeof(int));
carcar.top=carcar.last;
for (i=0,flag=0; ; i=++i%n) {
while (carcar.top!=carcar.last) {
if (*(carcar.top-1)==i+1) {
carcar.top--;
time++;
}
else if(good[i].ans<q){
goon=(queue*)malloc(sizeof(queue));
good[i].rear->next=goon;
goon->data=*(carcar.top-1);
goon->next=NULL;
good[i].rear=goon;
good[i].ans++;
carcar.top--;
time++;
}
else break;
}
while ((carcar.top-carcar.last<s)&&(good[i].ans>0)) {
*(carcar.top++)=good[i].front->next->data;
base=good[i].front->next;
good[i].front->next=good[i].front->next->next;
if (good[i].front->next==NULL) {
good[i].rear=good[i].front;
}
free(base);
good[i].ans--;
time++;
}
for (i_1=0,flag=0; i_1<n; i_1++) {
if (good[i_1].ans!=0) {
flag=1;
}
}
if ((flag==0)&&(carcar.top==carcar.last)) {
break;
}
time+=2;
}
printf("%d\n",time);
}
return 0;
}
将小车设为栈
在解决这道题目,我编了两次
第一次是没熟悉栈和队列的应用
导致程序惨不忍睹,所以干脆推倒从来
理解题意后,这道题其实非常简单
请大神指点