BZOJ P1034 泡泡堂BNB 貪心

2021-08-20 07:57:36 字數 2037 閱讀 6120

題目分析:

題意,不妨設浙江隊的實力值為a[

i]a [i

],對手隊的實力值為b[

i]b [i

],要求可能得到的最高分和最低分。對於可能得到的最高分,也就是我們要贏更多的局,在贏局局數相同的情況下,要讓平局的局數越多。a[

i]a [i

]贏b[

j]b [j

]的條件是:a[

i]>b[

j]a [i

]>b[

j]

,所以我們只需要將a[

],b[

] a[]

,b[]

從小到大排個序,然後從頭到尾依次比較即可。比如最先從a[

1],b

[1] a[1

],b[

1]

開始比較,如果a[

1]>b[

1]a [1

]>b[

1]

,那麼此時已經贏局,to

t+=2

t ot

+=

2,如果沒有贏就從後比較大小,如果a[

n]>b[

n],t

ot+=

2,a [n

]>b[

n],t

ot+=

2,

然後往前一位繼續比較,如果遇到從前往後從後往前都輸的情況,就比較a[

p],b

[q] a[p

],b[

q]

是否相等,如果a[

p]==b

[q] a[p

]==b[

q]

,則to

t++,

p++,

q−− tot

++,p

++,q

−−

(其中p p

表示a' role="presentation" style="position: relative;">a

a從前往後比較直到輸局時

a a

的編號,

q' role="presentation" style="position: relative;">qq表示

a a

從後往前比較直到輸局時

b' role="presentation" style="position: relative;">b

b的編號)。然後我們要求可能得到的最低分,轉換一下思路:我們要求浙江隊可能得到的最低分,那不妨求出對方隊可能得到的最高分,然後用總得分n∗

2 n∗2

來減去對方得分。

參考**

#include 

#include

#include

#include

#include

#define ll long long

#define fp(a,b,c) for(a=b;a<=c;a++)

#define fm(a,b,c) for(a=b;a>=c;a--)

using

namespace

std;

const ll max=1e5+5;

const ll inf=1e18;

ll n,ans,a[max],b[max];

inline ll read()

while(ch>='0'&&ch<='9')

return f?-x:x;

} inline

void write(ll x)

inline ll cal() else

if(a[l1]>b[l2]) else

}return cnt;

}int main()sort(a+1,a+1+n);

fp(i,1,n)sort(b+1,b+1+n);

write(cal());putchar(' ');

swap(a,b);

write((n<<1)-cal());

return

0;}

ZJOI2008 泡泡堂BNB 貪心

題意 傳送門 題解 算浙江省最多贏多少分,用田忌賽馬,算浙江省最少得多少分,另一方用田忌賽馬,然後用2 n ans即可,關於田忌賽馬這個貪心還是挺多坑的,想了很多才算過了。首先我們考慮的是我要贏更多,那麼我盡量虧對方,如果我的最快的馬比他的最快的馬快,那麼直接兩個最快的馬賽一場,肯定啊,我用最快的馬...

BZOJ1034 泡泡堂(貪心)

bzoj 洛谷很基礎的貪心,然而我竟然沒寫對。身敗名裂。大概就是類似田忌賽馬。先拿看當前最大值是否能否解決對面最大值,否則檢查能否用最小值來兌掉。差不多類似把,有點點區別。include include include include include include using namespace ...

1034 ZJOI2008 泡泡堂 貪心

第 x屆noi期間,為了加強各省選手之間的交流,組委會決定組織一場省際電子競技大賽,每乙個省的代表 隊由n名選手組成,比賽的專案是老少咸宜的網路遊戲泡泡堂。每一場比賽前,對陣雙方的教練向組委會提交乙份 參賽選手的名單,決定了選手上場的順序,一經確定,不得修改。比賽中,雙方的一號選手,二號選手 n號 ...