我在考試的時候看到了這道題,在一瞬間就蒙逼了,這是什麼題?(請原諒我−
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_arar
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...