比赛 |
NOIP2008集训模拟1 |
评测结果 |
WEEWAAEEEE |
题目名称 |
地精贸易 |
最终得分 |
20 |
用户昵称 |
Achilles |
运行时间 |
0.000 s |
代码语言 |
Pascal |
内存使用 |
0.00 MiB |
提交时间 |
2008-11-10 10:41:01 |
显示代码纯文本
program goblin;
var
sz1,sz2:array[0..100]of record
data,data2,num:longint;
end;
sz3:array[0..100]of longint;
hx:array[0..4000{000},0..100]of integer;
money,mfirst,n,i,j,t1,t2,max,r:longint;
begin
fillchar(hx,sizeof(hx),0);
assign(input,'goblin.in');
assign(output,'goblin.out');
reset(input);
rewrite(output);
readln(money,n);
mfirst:=money;
for i:=1 to n do
begin
readln(t1,t2);
t1:=t1-t2;
if t1<0 then begin
sz1[0].num:=sz1[0].num+1;
sz1[sz1[0].num].data:=0-t1;
sz1[sz1[0].num].data2:=t1+t2;
sz1[sz1[0].num].num:=i;
end;
if t1>0 then begin
sz2[0].num:=sz2[0].num+1;
sz2[sz2[0].num].data:=t1;
sz2[sz2[0].num].data2:=t2;
sz2[sz2[0].num].num:=i;
end;
end;
max:=0;
for i:=1 to sz1[0].num do
begin
j:=0;
if (j+sz1[i].data2<money) then begin
if hx[j,0]+sz1[i].data>=hx[j+sz1[i].data2,0] then begin
hx[j+sz1[i].data2]:=hx[j];
hx[j+sz1[i].data2,0]:=hx[j,0]+sz1[i].data;
hx[j+sz1[i].data2,sz1[i].num]:=hx[j+sz1[i].data2,sz1[i].num]+1;
if hx[j+sz1[i].data2,0]>max then begin
max:=hx[j+sz1[i].data2,0];
r:=j+sz1[i].data2;
end;
end;
end;
for j:=1 to money do
begin
if (hx[j,0]>0)and(j+sz1[i].data2<=money) then begin
if hx[j,0]+sz1[i].data>hx[j+sz1[i].data2,0] then begin
hx[j+sz1[i].data2]:=hx[j];
hx[j+sz1[i].data2,0]:=hx[j,0]+sz1[i].data;
if hx[j+sz1[i].data2,0]>max then begin
max:=hx[j+sz1[i].data2,0];
r:=j+sz1[i].data2;
end;
hx[j+sz1[i].data2,sz1[i].num]:=hx[j+sz1[i].data2,sz1[i].num]+1;
end;
end;
end;
end;
for i:=1 to n do
if hx[r,i]<>0 then sz3[i]:=hx[r,i];
fillchar(hx,sizeof(hx),0);
money:=money{*2-r}+max;
max:=0;
for i:=1 to sz2[0].num do
begin
j:=0;
if (j+sz2[i].data2<=money) then begin
if hx[j,0]+sz2[i].data>hx[j+sz2[i].data2,0] then begin
hx[j+sz2[i].data2]:=hx[j];
hx[j+sz2[i].data2,0]:=hx[j,0]+sz2[i].data;
hx[j+sz2[i].data2,sz2[i].num]:=hx[j+sz2[i].data2,sz2[i].num]+1;
if hx[j+sz2[i].data2,0]>max then begin
max:=hx[j+sz2[i].data2,0];
r:=j+sz2[i].data2;
end;
end;
end;
for j:=1 to money do
begin
if (hx[j,0]>0)and(j+sz2[i].data2<=money) then begin
if hx[j,0]+sz2[i].data>hx[j+sz2[i].data2,0] then begin
hx[j+sz2[i].data2]:=hx[j];
hx[j+sz2[i].data2,0]:=hx[j,0]+sz2[i].data;
if hx[j+sz2[i].data2,0]>max then begin
max:=hx[j+sz2[i].data2,0];
r:=j+sz2[i].data2;
end;
hx[j+sz2[i].data2,sz2[i].num]:=hx[j+sz2[i].data2,sz2[i].num]+1;
end;
end;
end;
end;
for i:=1 to n do
if hx[r,i]<>0 then sz3[i]:=0-hx[r,i];
writeln(money{*2-r}+max-mfirst);
for i:=1 to n do
if sz3[i]=0 then writeln('Buy 0') else begin
if sz3[i]>0 then writeln('Buy ',sz3[i],' form Aliance') else writeln('Buy ',0-sz3[i],' form Horde');
end;
close(input);
close(output);
end.