codevs1027

来源:互联网 发布:2016淘宝怎么注册 编辑:程序博客网 时间:2024/06/05 03:38

题目地址:http://codevs.cn/problem/1027/

代码:

varw:array[1..20,1..20] of boolean;ID:array[1..20] of string;nm,ans:array[1..20] of string;room2,used:array[1..20] of boolean;r,tr:array[1..20] of longint;N,i,j,p,tmp:longint;cc:char;ss:string;function checkname(s:string):longint;vari:longint;beginfor i:=1 to p do  if nm[i]=s then   exit(i);inc(p);nm[p]:=s;checkname:=p;end;function checkID(s:string):longint;vari:longint;beginfor i:=1 to n do  if ID[i]=s then   exit(i);end;function dfs(p:longint):boolean;vari:longint;beginif p=0 then  exit(false);for i:=1 to n do  if w[p,i] and not(used[i]) then  begin   used[i]:=true;   if (r[i]=0) or dfs(r[i]) then   begin    r[i]:=p;    exit(true);   end;  end;dfs:=false;end;beginreadln(N);for i:=1 to n do  for j:=1 to n do   w[i,j]:=true;for i:=1 to n-1 dobegin  setlength(ID[i],20);  read(cc);j:=0;  while cc<>' ' do  begin   inc(j);   ID[i][j]:=cc;   read(cc);  end;  setlength(ID[i],j);end;readln(ID[n]);readln(ss);while ss<>'Q' dobegin  case ss[1] of  'E':begin    delete(ss,1,2);    room2[checkname(ss)]:=true;   end;  'L':begin    delete(ss,1,2);    room2[checkname(ss)]:=false;   end;  'M':begin    delete(ss,1,2);    tmp:=checkID(ss);    for i:=1 to n do     if not room2[i] then     begin      w[tmp,i]:=false;     //writeln('del ',tmp,' ',i); //debug     end;   end;  end;  readln(ss);end;for i:=1 to n dobegin  fillchar(used,sizeof(used),0);  dfs(i);end;for i:=1 to n do  if r[i]>0 then  begin   tr:=r;   w[r[i],i]:=false;   r[i]:=0;   fillchar(used,sizeof(used),0);   if dfs(tr[i]) then    ans[i]:=nm[i]+':???'   else    ans[i]:=nm[i]+':'+ID[tr[i]];   r:=tr;   w[r[i],i]:=true;  end;for i:=1 to n-1 do  for j:=i+1 to n do   if ans[i]>ans[j] then   begin    ss:=ans[i];    ans[i]:=ans[j];    ans[j]:=ss;   end;for i:=1 to n do  writeln(ans[i]);end.

0 0
原创粉丝点击