【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=1034
【题意】
给两个序列以任意顺序比较,求出最大和最小得分。
【思路】
排序后使用贪心。
最小的能赢就赢,最大的能赢就赢,否则用最小的比最大的。
【代码】
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 #include<algorithm> 5 using namespace std; 6 7 const int N = 3e5+10; 8 9 int a[N],b[N],n; 10 11 void read(int& x) 12 { 13 char c=getchar(); int f=1;x=0; 14 while(!isdigit(c)) { if(c=='-')f=-1; c=getchar(); } 15 while(isdigit(c)) x=x*10+c-'0',c=getchar(); 16 x*=f; 17 } 18 int solve(int* a,int* b) 19 { 20 int l1=1,r1=n,l2=1,r2=n; 21 int res=0; 22 while(l1<=r1&&l2<=r2) 23 { 24 if(a[l1]>b[l2]) { res+=2; l1++; l2++; } 25 else if(a[r1]>b[r2]) { res+=2; r1--,r2--; } 26 else { 27 res+=a[l1]==b[r2]; 28 l1++,r2--; 29 } 30 } 31 return res; 32 } 33 34 int main() 35 { 36 read(n); 37 for(int i=1;i<=n;i++) read(a[i]); 38 for(int i=1;i<=n;i++) read(b[i]); 39 sort(a+1,a+n+1); 40 sort(b+1,b+n+1); 41 printf("%d %d",solve(a,b),2*n-solve(b,a)); 42 return 0; 43 }