2014年8月5日10:58:24 更新:
贪心标准:若能赢则以最小的代价赢,若得输就让对方付出最大的代价。
思路:先小到大排序,从最小的开始比较,若tian{小} > king{小},则赢掉这局,若tian{小} < king{小},则用tian[小]输掉king[大],若tian{小} == king{小},则比较最大的,若tian{大} > king{大}, 则用大的赢大的,若tian{大} < king{大}则用tian小输掉king大,若tian{大} == king{大}, 再比较tian小和king大,若小则输掉这局,否则平掉。
更新后:
#include <stdio.h>
#include <algorithm>
#define maxn 1002
using std::sort;
int tian[maxn], king[maxn];
int main()
{
int n, i, tl, tr, kl, kr, ans;
while(scanf("%d", &n), n){
for(i = 0; i < n; ++i)
scanf("%d", tian + i);
for(i = 0; i < n; ++i)
scanf("%d", king + i);
sort(tian, tian + n);
sort(king, king + n);
tl = kl = 0; tr = kr = n - 1;
ans = 0;
while(tl <= tr){
if(tian[tl] > king[kl]){
++ans; ++tl; ++kl;
}else if(tian[tl] < king[kl]){
--ans; ++tl; --kr;
}else{
if(tian[tr] > king[kr]){
++ans; --tr; --kr;
}else if(tian[tr] < king[kr]){
--ans; ++tl; --kr;
}else{
if(tian[tl] < king[kr])
--ans;
++tl; --kr;
}
}
}
printf("%d\n", ans * 200);
}
}
更新前:
#include <stdio.h>
#include <stdlib.h>
int a[1001], b[1001];
int cmp(const void *a, const void *b){
return *(int *)a - *(int *)b;
}
int main(){
int n, count, i;
int ax, ay, bx, by;
while(scanf("%d", &n), n){
count = 0;
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);
ax = bx = count = 0;
ay = by = n - 1;
while(ax <= ay){
if(a[ay] > b[by]){
++count;
--ay;
--by;
}else if(a[ay] < b[by]){
--count;
++ax;
--by;
}else{
if(a[ax] < b[bx]){
--count;
++ax;
--by;
}else if(a[ax] == b[bx]){
if(a[ax] < b[by]) --count;
++ax; --by;
}else{
++ax; ++bx;
++count;
}
}
}
printf("%d\n", count * 200);
}
return 0;
}