Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

这题意思其实就是让每个字母出现偶数次,用xor优化会很快

Posted by lydliyudong at 2011-11-01 13:41:40 on Problem 1903 and last updated at 2011-11-01 13:42:24
题目是让找最多的骨骼,使得每个字母都出现偶数次。
第i个字母,就用i个1(二进制下)代替,预处理出每个骨骼上的字母xor后的值。
然后2^N爆搜,最后xor值为0的就是一个可行解。

var
 a,b,c,d:array[0..26]of longint;
 s:ansistring;
 n,i,j:longint;
procedure dfs(x,y,temp:longint);
 begin
  if x=n+1 then
   begin
    if (temp=0)and(c[0]>d[0]) then d:=c;
    exit;
   end;
  dfs(x+1,y,temp);
  inc(c[0]);
  c[c[0]]:=x;
  dfs(x+1,y+1,temp xor b[x]);
  dec(c[0]);
 end;
begin
 for i:=1 to 26 do a[i]:=1<<i-1;
 readln(n);
 for i:=1 to n do
  begin
   readln(s);
   for j:=1 to length(s) do b[i]:=b[i] xor a[ord(s[j])-64];
  end;
 dfs(1,0,0);
 writeln(d[0]);
 for i:=1 to d[0] do write(d[i],' ');
 writeln;
end.

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator