题目1334:占座位
做本题要细心细心,再细心。AC代码 60ms
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
typedef struct node{
int start;
int end;
}node;
node c[101];
char a[10010];
char in[101];
char out[101];
char op[5];
int main(int argc, char *argv[])
{
int n,m;
int id;
int k;
//freopen("1334.in","r",stdin);
while(~scanf("%d%d%d",&n,&m,&k))
{
memset(c,0,sizeof(c));
memset(a,0,sizeof(a));
memset(in,0,sizeof(in));
memset(out,0,sizeof(out));
for(int i=1;i<=k;++i)
{
scanf("%s",op);
if(strcmp(op,"in")==0)
{
int num;
scanf("%d%d",&id,&num);
if(in[id]==0)//没参加过
{
//have a try
int cnt=0;
int tt;
int flag=0;
for(tt=1;tt<=n*n;++tt)
{
if(a[tt]==0){
cnt++;
if(cnt==num){
flag=1;
printf("yes\n");
c[id].start=tt-num+1;
c[id].end=tt;
//printf("start %d end %d\n",c[id].start,c[id].end);
in[id]=1;//标志参加了
out[id]=0;
for(int k=c[id].start;k<=c[id].end;++k)
a[k]=1;//占位置
break;
}
}
else if(a[tt]==1)
cnt=0;
}
if(!flag)
printf("no\n");
}
else
{
//已经参加过了
printf("no\n");
}
}
else
{
scanf("%d",&id);
if(out[id]==0)
{
in[id]=0;
out[id]=1;
int s=c[id].start;
int e=c[id].end;
for(int i=s;i<=e;++i)
a[i]=0;
}
}
}
}
return 0;
}