[恢]hdu 1052
2011-12-17 04:11:34
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1052
题意:田忌赛马,给n个马匹的速度,胜+200,负-200,平的话什么都不做。问最多得多少钱。
mark:写了一个二分图匹配,但是发现有平的情况真是非常不好处理,应该需要最佳匹配才能解决。
这里直接用贪心的结论了。
代码:
# include <stdio.h>
# include <stdlib.h>
int a[1010], b[1010] ;
int n ;
int gao()
{
int i ;
int p1=0,p2=0,q1=n-1,q2=n-1;
int ans = 0 ;
for (i = 0 ; i < n ; i++)
{
if (a[p1] < b[p2] || b[q2] > a[q1])
p1++, q2--, ans-- ;
else if (a[p1] > b[p2])
p1++, p2++, ans++ ;
else if (a[q1] > b[q2])
q1--, q2--, ans++ ;
else ans -= (a[p1] != b[q2]), p1++, q2-- ;
}
return ans ;
}
int cmp(const void *a, const void *b)
{
return *(int*)a - *(int*)b ;
}
int main ()
{
int i ;
while (~scanf ("%d", &n) && n)
{
for (i = 0 ; i < n ; i++)
scanf ("%d", &a[i]) ;
for (i = 0 ; i < n ; i++)
scanf ("%d", &b[i]) ;
qsort (a, n, sizeof (int), cmp) ;
qsort (b, n, sizeof (int), cmp) ;
printf ("%d\n", gao() * 200) ;
}
}