标签:
类似于田忌赛马,尽量让最弱的打最弱,最强的打最强的。如果最弱的无法击败对方最弱的,就耗掉对方最强的。
听起来很容易。。然而由于存在实力相等+1分的情况,处理起来有点小问题。。
最后对着别人的代码才调对qaq
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 using namespace std; 6 7 void Get_Val(int &Ret) 8 { 9 Ret = 0; 10 char ch; 11 while ((ch = getchar()), (ch > ‘9‘ || ch < ‘0‘)) 12 ; 13 do 14 { 15 (Ret *= 10) += ch - ‘0‘; 16 } 17 while ((ch = getchar()), (ch >= ‘0‘ && ch <= ‘9‘)); 18 } 19 20 const int Max_N(100050); 21 22 int N; 23 int a[Max_N], b[Max_N]; 24 25 void init() 26 { 27 Get_Val(N); 28 for (int i = 1;i <= N;++i) 29 Get_Val(a[i]); 30 for (int i = 1;i <= N;++i) 31 Get_Val(b[i]); 32 sort(a + 1, a + 1 + N); 33 sort(b + 1, b + 1 + N); 34 } 35 36 int Best() 37 { 38 int al(1), ar(N), bl(1), br(N), Ans(0); 39 while (al <= ar) 40 { 41 if (a[al] > b[bl]) 42 { 43 Ans += 2; 44 ++al, ++bl; 45 } 46 else 47 if (a[ar] > b[br]) 48 { 49 Ans += 2; 50 --ar, --br; 51 } 52 else 53 { 54 Ans += (a[al] == b[br]); 55 ++al, --br; 56 } 57 } 58 return Ans; 59 } 60 61 void work() 62 { 63 printf("%d", Best()); 64 for (int i = 1;i <= N;++i) 65 swap(a[i], b[i]); 66 printf(" %d\n", (N << 1) - Best()); 67 } 68 69 int main() 70 { 71 init(); 72 work(); 73 return 0; 74 }
标签:
原文地址:http://www.cnblogs.com/Created-equal/p/5179463.html