P1650 田忌賽馬

2021-10-03 22:00:19 字數 1649 閱讀 3199

我在考試的時候看到了這道題,在一瞬間就蒙逼了,這是什麼題?(請原諒我−

250-250

−250

的智商)於是懵裡懵懂的打了個d

dd(電)f

ff(風)s

ss(扇),結果連樣例都沒有過。(畢竟才學搜尋沒多久嘛,也就兩年)。再一看,看出了田忌賽馬的味道,原來是這樣!立刻打了個貪心信心滿滿的交上去。

#include

using

namespace std;

int a[

514514

],b[

514514

],n,t,k;

long

long ans;

bool

cmp(

int x,

int y)

intmain()

if(a[i]

!=b[k]

) ans--

; k--;}

else ans++;}

cout<200

}

acac

ac了!(那是不可能的)只拿了80

8080

分。(在洛谷是爆零的)原因?各位讀者自己推一下也就推出來了:田忌與齊王的尾指標是一樣的!而且平局時的處理也不夠。。。。。。漏洞百出,80

8080

分真是萬幸了。

好,接下來是正解了!

運用我們的老祖宗田忌的思路!

設l ala

la,r ara

ra為田忌的頭,尾指標,lblb

lb,r brb

rb為齊王的頭,尾指標,將兩個速度值從大到小排序,如果ala

>bl

ba_>b_

ala​

>bl

b​那麼a ns

++

ans++

ans++,la−

−la--

la−−

,r a−

−ra--

ra−−

,就是勝利了,如果尾指標也是這樣那麼同上,最重要的是平局,那麼如果ara

a_ara​r

bb_

brb​

,就讓ara

a_ar

a​作為炮灰去浪費齊王的好馬。

ac**:

#include

using

namespace std;

int a[

514514

],b[

514514

],ans,n,la,lb,ra,rb,t;

intmain()

else

else

else}}

}}cout<200

}

附帶提一下,樓上有大佬用dpdp

dp,但是dpdp

dp的複雜度是o(n

2)

o(n^2)

o(n2

),但貪心是o(n

log2

n)

o(nlog^2n)

o(nlog

2n)的。如果多組資料或資料加強就過不去了,如這道題的加強版

P1650 田忌賽馬

n 齊王和田忌各有n nn匹馬,每匹馬都有乙個強度值ai bia i b i ai bi 每次齊王和田忌要從自己的n nn匹馬中選乙個上去比賽,其中齊王總是讓馬從強到弱上 若兩匹馬強度不同,則強度高的那一方將獲得200 20020 0銀幣,若強度相同,兩方都獲得不了盈利 試著替田忌安排一種讓馬上去比...

P1650 田忌賽馬

我在考試的時候看到了這道題,在一瞬間就蒙逼了,這是什麼題?請原諒我 250 的智商 於是懵裡懵懂的打了個 d 電 f 風 s 扇 結果連樣例都沒有過。畢竟才學搜尋沒多久嘛,也就兩年 再一看,看出了田忌賽馬的味道,原來是這樣 立刻打了個貪心信心滿滿的交上去。includeusing namespace...

題解 P1650 田忌賽馬

與古代田忌的應對方法差不多,現在我們任然可以用貪心的思路解答。1.田忌的馬甚至比齊王的馬快,那麼,直接將兩人最快的馬進行比賽,達到最優 2.田忌最快的馬比齊王最快的馬要慢,則與古代田忌的方案相同,用田忌最慢的馬消耗掉齊王最快的馬 3.齊王最快的馬與田忌最快的馬速度相當,又可以分成2種情況 程式 in...