您的位置:首页 > 其它

HDU1052 Tian Ji -- The Horse Racing【贪心】

2014-03-15 14:03 471 查看
原题链接

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> king[kr]){
++ans; --tr; --kr;
}else if(tian< 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HDU1052