題目分析:
題意,不妨設浙江隊的實力值為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號 ...