POJ1465 Multiple——Bfs+余数判重——Pku1465
2011-09-14 19:31
239 查看
这道题精在判重优化。因为如果存在两个数A、B,且满足A mod n=B mod n=C,那么,这两种情况可以看做是重复的,保留较小数即可。具体优化,开一个布尔数组即可。
特别需要注意一点:如果n=0,那么应当输出0!!!{本弱就因为这个WA了半天,看Discuss才明白的……}
CODE
特别需要注意一点:如果n=0,那么应当输出0!!!{本弱就因为这个WA了半天,看Discuss才明白的……}
CODE
Program Multiple;//By_Thispoet Const maxn=20000; Var h,t,j,k,m,n,i :Longint; seq,fa,mol :Array[1..maxn]of Integer; a :Array[1..maxn]of Longint; fg :Array[0..maxn]of Boolean; flag :Boolean; ans :Array[1..maxn*2]of Longint; Procedure Qsort(l,r:Longint); var i,j,k,temp:Longint; begin i:=l;j:=r; k:=a[(i+j)>>1]; repeat while a[i]<k do inc(i); while a[j]>k do dec(j); if i<=j then begin temp:=a[i];a[i]:=a[j];a[j]:=temp; inc(i);dec(j); end; until i>j; if i<r then Qsort(i,r); if l<j then QSort(l,j); end; Procedure Deal(i:Longint); begin k:=0; while i<>0 do begin inc(k); ans[k]:=seq[i]; i:=fa[i]; end; for i:=k downto 1 do write(ans[i]); writeln; end; BEGIN readln(n); readln(m); while not eof do begin fillchar(fg,sizeof(fg),0); fillchar(fa,sizeof(fa),0); for i:=1 to m do readln(a[i]); flag:=true; Qsort(1,m); h:=0; if n=0 then begin writeln(0); readln(n);readln(m); continue; end; if a[1]=0 then begin for i:=2 to m do begin seq[i-1]:=a[i]; fg[a[i] mod n]:=true; mol[i-1]:=a[i] mod n; if a[i] mod n=0 then begin flag:=false; writeln(a[i]); end; if not flag then break; end; t:=m-1; end else begin for i:=1 to m do begin seq[i]:=a[i]; fg[a[i] mod n]:=true; mol[i]:=a[i] mod n; if a[i] mod n=0 then begin writeln(a[i]); flag:=false; end; if not flag then break; end; t:=m; end; if not flag then begin readln(n);readln(m);continue; end; while h<t do begin inc(h); for j:=1 to m do begin i:=(mol[h]*10+a[j])mod n; if fg[i] then continue else begin fg[i]:=true; inc(t); seq[t]:=a[j]; fa[t]:=h; mol[t]:=i; end; if i=0 then begin Deal(t); flag:=false; end; end; end; if flag then writeln(0); readln; readln(n); readln(m); end; END.
相关文章推荐
- POJ 1465/ ZOJ 1136 : Multiple - BFS,余数判重
- Poj 1465 Multiple BFS+余数判重
- POJ 1465 Multiple BFS + 余数判重
- (BFS)poj1465-Multiple
- poj 1465 bfs,余数判重
- ZOJ 1136 Multiple BFS(POJ 1465)
- POJ1426-Find The Multiple (BFS 余数)
- POJ 1465 Multiple(用BFS求能组成的n的最小倍数)
- poj 1465 Multiple 静态节点+余数判重+非STL队列的广搜
- POJ 1465 Multiple (BFS,同余定理)
- POJ 1465-Multiple(BFS-最小整倍数)
- POJ 1465 Multiple(BFS+同于定理+打印路径)
- POJ 1465 Multiple (BFS,同余定理)
- POJ 1465 Multiple BFS
- POJ1426——BFS——Find The Multiple
- poj1426——Find The Multiple(BFS)
- POJ-1426-Find The Multiple(BFS DFS)
- POJ 1426 Find The Multiple (DFS / BFS)
- poj Find The Multiple(DFS,BFS)
- Poj 1426--Find The Multiple(bfs或dfs)