| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
我现在修改了程序,但是却又超时了,麻烦各位帮忙看下我的程序In Reply To:我的样例能过,之前有人给的很多数据,都能过,但还是WA,麻烦各位高手帮帮忙 Posted by:liangzijie2010 at 2012-08-13 09:31:00
program poj1011 ;
type aa=array[1..64]of integer;
var i,j,k,n,long,last,last2:integer;
sm:aa;
find,ok:boolean;
map:array[1..64]of integer;
b:array[1..64]of boolean;
procedure qsort(var a:aa;l,r:integer);//快排
var i,j,t:integer;
begin
if l<r then
begin
t:=a[l];
i:=l;
j:=r;
repeat
while (i<j)and (t>=a[j]) do j:=j-1;
if i<j then
begin
a[i]:=a[j];
i:=i+1;
end;
while (i<j)and(t<=a[i]) do i:=i+1;
if i<j then
begin
a[j]:=a[i];
j:=j-1;
end;
until i>=j;
a[i]:=t;
qsort(a,l,i-1);
qsort(a,i+1,r);
end;
end;
procedure put(num,x:integer);
var i,j,k:integer;
begin
if (find) then exit;
if num=n then begin find:=true; exit;end
else
if map[x]=long then begin put(num,x+1);ok:=true;end
else
if map[x]=0 then
begin
i:=2;
while ((not b[i])or(sm[i]=last))and(i<=n) do i:=i+1;
if i=n+1 then exit;
b[i]:=false;
map[x]:=map[x]+sm[i];
put(num+1,x);
map[x]:=map[x]-sm[i];
b[i]:=true;
last:=sm[i];
end
else
begin
for i:=2 to n do
if ((map[x]+sm[i])<=long)and(b[i])and(ok)and(sm[i]<>last2) then
begin
map[x]:=map[x]+sm[i];
b[i]:=false;
put(num+1,x);
map[x]:=map[x]-sm[i];
b[i]:=true;last2:=sm[i];
end;
end
end;
begin
readln(n);
while n<>0 do
begin
fillchar(sm,sizeof(sm),0);
k:=0;
for i:=1 to n do begin read(sm[i]); k:=k+sm[i];end//此处k记录短棍子长度和,sm记录各根棍子的长度
readln;
qsort(sm,1,n);
find:=false;
long:=sm[1];
while not find do
begin
long:=long+1;//long是记录当前长棍子的长度
if (k mod long)=0 then
begin
fillchar(b,sizeof(b),true);//b用来记录某根段棍子是否可用,true为可用
fillchar(map,sizeof(map),0);//map是记录每根长棍子已用长度
ok:=true;
last:=0;
last2:=0;
map[1]:=sm[1];
b[1]:=false;
put(1,1);
end;
end;
writeln(long);
readln(n)
end
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator