題意:田忌和齊王都有 n(n <= 1000)匹馬,兩者進行 n 輪賽馬,贏一局+200,平一局得 0,輸一局 -200,求田忌最多能贏多少錢。ios
貪心,先將田忌和齊王的馬分別排序,而後最上等與最上等比,最下等與最下等比,若是有能贏的則+200,若是沒法知足條件,則用田忌的最下等與齊王的最上等比(故意輸或者平局)。spa
代碼以下:code
1 #pragma comment(linker, "/STACK:102400000, 102400000") 2 #include<cstdio> 3 #include<cstring> 4 #include<cctype> 5 #include<cstdlib> 6 #include<cmath> 7 #include<iostream> 8 #include<sstream> 9 #include<iterator> 10 #include<algorithm> 11 #include<string> 12 #include<vector> 13 #include<set> 14 #include<map> 15 #include<deque> 16 #include<queue> 17 #include<stack> 18 #include<list> 19 #define fin freopen("in.txt", "r", stdin) 20 #define fout freopen("out.txt", "w", stdout) 21 #define pr(x) cout << #x << " : " << x << " " 22 #define prln(x) cout << #x << " : " << x << endl 23 #define Min(a, b) a < b ? a : b 24 #define Max(a, b) a < b ? b : a 25 typedef long long ll; 26 typedef unsigned long long llu; 27 const int INT_INF = 0x3f3f3f3f; 28 const int INT_M_INF = 0x7f7f7f7f; 29 const ll LL_INF = 0x3f3f3f3f3f3f3f3f; 30 const ll LL_M_INF = 0x7f7f7f7f7f7f7f7f; 31 const double pi = acos(-1.0); 32 const double EPS = 1e-8; 33 const int dr[] = {0, 0, -1, 1, -1, -1, 1, 1}; 34 const int dc[] = {-1, 1, 0, 0, -1, 1, -1, 1}; 35 const ll MOD = 1e9 + 7; 36 using namespace std; 37 38 #define NDEBUG 39 #include<cassert> 40 const int MAXN = 1000 + 10; 41 const int MAXT = 10000 + 10; 42 43 int n; 44 deque<int> t, k; 45 46 int main(){ 47 while(scanf("%d", &n) == 1 && n){ 48 int tmp; 49 t.clear(); 50 k.clear(); 51 for(int i = 0; i < n; ++i) {scanf("%d", &tmp); t.push_back(tmp);} 52 for(int i = 0; i < n; ++i) {scanf("%d", &tmp); k.push_back(tmp);} 53 sort(t.begin(), t.end()); 54 sort(k.begin(), k.end()); 55 int ans = 0; 56 while(n--){ 57 if(t.front() > k.front()){ 58 t.pop_front(); 59 k.pop_front(); 60 ans += 200; 61 } 62 else if(t.back() > k.back()){ 63 t.pop_back(); 64 k.pop_back(); 65 ans += 200; 66 } 67 else{ 68 if(t.front() != k.back()) ans -= 200; 69 t.pop_front(); 70 k.pop_back(); 71 } 72 } 73 printf("%d\n", ans); 74 } 75 return 0; 76 }