http://acm.hdu.edu.cn/showproblem.php?pid=1052
题意:给一个n是双方的马匹数,第一行是田忌的马,第二行是齐王的马,
赢了赚200两银子,输了输两百两,平局则没有
题解:利用贪心策略,
#include <bits/stdc++.h> #include <iostream> using namespace std; int a[2005],b[2005]; int main() { int t,ans; int l1,l2,r2,r1; while(cin>>t&&t) { for(int i=0;i<t;i++) scanf("%d",&a[i]); for(int i=0;i<t;i++) scanf("%d",&b[i]); sort(a,a+t); sort(b,b+t); l1=0,l2=0,r2=t-1,r1=t-1; ans=0; while(l1<=r1) { if(a[r1]>b[r2])//田忌最好的马比齐王好 { ans+=200; r1--,r2--; } else if(a[r1]<b[r2])//田忌最好的马没有齐王好,用他最差的马和齐王比 {ans-=200; l1++; r2--; } else if(a[r1]==b[r2]&&a[l1]>b[l2])//田忌最好的马速度和齐王一样快,最差的马比齐王最差的马快 { ans+=200; l1++; l2++; }else if((a[r1]==b[r2])&&(a[l1]<=b[l2]))//田忌最好的马速度和齐王一样快,最差的马比不上齐王最差的马
//用最差的去和齐王最好的马比较 { if(a[l1]<b[r2])ans-=200; l1++; r2--; } } printf("%d\n",ans); } return 0; }