讨论 / 怎么赛?
Aaron_Kaka 2008-11-08 06:06:00
点我顶贴 收藏 删除
此题模型是田忌赛马,可是,该怎么赛?

#1 zrp@2008-09-09 21:56:00
回复 删除
即能赢就赢,用大赢大,用小赢小,在自己方最大,最小都不大于对方的最大,最小时,用自己的最小去碰对方最大即可
#2 Aaron_Kaka@2008-11-08 03:47:00
回复 删除
我按这做仍然不对。

谁发个pascal的程序参考参考?

#3 Aaron_Kaka@2008-11-08 04:23:00
回复 删除
“算法可以用DP,或者给每匹马连线赋权变为二分图最佳匹配,还有就是贪心了。

1.当田忌最慢的马比齐王最慢的马快,赢一场先

2.当田忌最慢的马比齐王最慢的马慢,和齐王最快的马比,输一场

3.当田忌最快的马比齐王最快的马快时,赢一场先。

4.当田忌最快的马比齐王最快的马慢时,拿最慢的马和齐王最快的马比,输一场。

5.当田忌最快的马和齐王最快的马相等时,拿最慢的马来和齐王最快的马比.”

这倒是正解……

#4 Jollwish@2008-11-08 06:06:00
回复 删除
给你看看我写的吧...

var a,b:array[1..100000]of longint;

i,j,n,s,ax,an,bx,bn:longint;

procedure sort1(l,r:integer);

var i,j,x,y:integer;

begin

i:=l;

j:=r;

x:=a[(l+r) shr 1];

repeat

while a[i]<x do inc(i);

while x<a[j] do dec(j);

if i<=j then

begin

y:=a[i];

a[i]:=a[j];

a[j]:=y;

inc(i);

dec(j);

end;

until i>j;

if i<r then sort1(i,r);

if l<j then sort1(l,j);

end;

procedure sort2(l,r:integer);

var i,j,x,y:integer;

begin

i:=l;

j:=r;

x:=b[(l+r) shr 1];

repeat

while b[i]<x do inc(i);

while x<b[j] do dec(j);

if i<=j then

begin

y:=b[i];

b[i]:=b[j];

b[j]:=y;

inc(i);

dec(j);

end;

until i>j;

if i<r then sort2(i,r);

if l<j then sort2(l,j);

end;

begin

repeat

readln(n);

if n=0 then exit;

for i:=1 to n do read(a[i]);

sort1(1,n);

readln;

for i:=1 to n do read(b[i]);

sort2(1,n);

readln;

s:=0;

ax:=n;

an:=1;

bx:=n;

bn:=1;

for i:=1 to n do

begin

if a[ax]>b[bx] then

begin

inc(s,200);

dec(ax);

dec(bx);

continue;

end;

if a[an]>b[bn] then

begin

inc(s,200);

inc(an);

inc(bn);

continue;

end;

if a[an]>b[bx] then inc(s,200);

if a[an]<b[bx] then dec(s,200);

inc(an);

dec(bx);

end;

writeln(s);

until n=0;

end.

查看更多回复
提交回复