#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; }
原文地址:http://blog.csdn.net/wdkirchhoff/article/details/41897193