——BZOJ1034 php
第XXXX屆NOI期間,爲了增強各省選手之間的交流,組委會決定組織一場省際電子競技大賽,每個省的表明隊由n名選手組成,比賽的項目是老小咸宜的網絡遊戲泡泡堂。每一場比賽前,對陣雙方的教練向組委會提交一份參賽選手的名單,決定了選手上場的順序,一經肯定,不得修改。比賽中,雙方的一號選手,二號選手……,n號選手捉對廝殺,共進行n場比賽。每勝一場比賽得2分,平一場得1分,輸一場不得分。最終將雙方的單場得分相加得出總分,總分高的隊伍晉級(總分相同抽籤決定)。做爲浙江隊的領隊,你已經在事先將各省全部選手的泡泡堂水平了解的一清二楚,並將其用一個實力值來衡量。爲簡化問題,咱們假定選手在遊戲中徹底不受任何外界因素干擾,即實力強的選手必定能夠打敗實力弱的選手,而兩個實力相同的選手必定會戰平。因爲徹底不知道對手會使用何種策略來肯定出場順序,因此全部的隊伍都採起了這樣一種策略,就是徹底隨機決定出場順序。固然你不想這樣不明不白的進行比賽。你想事先了解一下在最好與最壞的狀況下,浙江隊最終分別能獲得多少分。網絡
輸入的第一行爲一個整數n,表示每支表明隊的人數。接下來n行,每行一個整數,描述了n位浙江隊的選手的實力值。接下來n行,每行一個整數,描述了你的對手的n位選手的實力值。
20%的數據中,\(1 \le n \le 10\);
40%的數據中,\(1 \le n \le 100\);
60%的數據中,\(1 \le n \le 1000\);
100%的數據中,\(1 \le n \le 100000\),且全部選手的實力值在0到100
00000之間。spa
包括兩個用空格隔開的整數,分別表示浙江隊在最好與最壞的狀況下分別能得多少分。不要在行末輸出多餘的
空白字符。code
2 1 3 2 4
2 0
這道題相似於田忌賽馬的貪心。
若是我方最強強於對方最強,打;
若是我方最弱強於對方最弱,打;
不然最弱打最強送死爲其餘人創造機會。遊戲
#include<cstdio> #include<algorithm> #include<queue> using namespace std; const int maxn = 1e5 + 5; int n,ans1,ans2; int s1[maxn],s2[maxn]; deque <int> zj; deque <int> ln; int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&s1[i]); for(int i=1;i<=n;i++) scanf("%d",&s2[i]); sort(s1+1,s1+n+1); sort(s2+1,s2+n+1); for(int i=1;i<=n;i++) zj.push_back(s1[i]); for(int i=1;i<=n;i++) ln.push_back(s2[i]); while(!zj.empty()) { if(zj.front() > ln.front()) { zj.pop_front(); ln.pop_front(); ans1 += 2; } else if(zj.back() > ln.back()) { zj.pop_back(); ln.pop_back(); ans1 += 2; } else if(ln.back() == zj.front()) { zj.pop_front(); ln.pop_back(); ans1 ++; } else { zj.pop_front(); ln.pop_back(); } } for(int i=1;i<=n;i++) zj.push_back(s2[i]); for(int i=1;i<=n;i++) ln.push_back(s1[i]); while(!zj.empty()) { if(zj.front() > ln.front()) { zj.pop_front(); ln.pop_front(); ans2 += 2; } else if(zj.back() > ln.back()) { zj.pop_back(); ln.pop_back(); ans2 += 2; } else if(ln.back() == zj.front()) { zj.pop_front(); ln.pop_back(); ans2 ++; } else { zj.pop_front(); ln.pop_back(); } } printf("%d %d",ans1,2*n - ans2); return 0; }