HDU--1052

来源:互联网 发布:面试题php了解多少 编辑:程序博客网 时间:2024/05/06 04:40

http://acm.hdu.edu.cn/showproblem.php?pid=1052

有关于田忌赛马的问题

这是一个贪心问题,思路:首先将两组数据从大到小排序

每次取田忌最快马与国王最快马比较,分三种情况:

当田忌最快的马的速度>国王最快马的速度,当然用这两匹马比较,此时田忌显然胜一场;

当田忌最快的马的速度<国王最快马的速度,需要用田忌最慢的马跟国王最快的马比一场,输一场;

当田忌最快的马的速度=国王最快马的速度,需要分类讨论,以最慢的马的速度来分析:

1、田忌最慢的马的速度>国王最慢马的速度,赢一场;

2、田忌最慢的马的速度<国王最慢马的速度,用田忌最慢的马跟国王最快的马比一场;

3、田忌最慢的马的速度=国王最慢马的速度,用田忌最慢的马跟国王最快的马比一场;


#include<iostream>#include<stdio.h>#include<string>#include<math.h>#include<vector>#include<queue>#include<string.h>#include<algorithm>#define N 1005#define mod 1000000007#define ll long long#define ex 2.7182818284590452354#define pi 3.141592653589793239#define INFF 999999999using namespace std;int a[N],b[N],c[N];bool cmp(int a,int b){    return a>b;}int main(){    int n;    while(scanf("%d",&n)!=EOF&&n!=0)    {        int i,j;        int tk,gk,tm,gm,sum;        for(i=0;i<n;i++)            scanf("%d",&a[i]);        sort(a,a+n,cmp);        for(i=0;i<n;i++)            scanf("%d",&b[i]);        sort(b,b+n,cmp);        tk=gk=0,tm=gm=n-1,sum=0;        while(tk<=tm)        {            if(a[tk]>b[gk])            {                c[tk]=gk;                tk++;                gk++;            }            else if(a[tk]<b[gk])            {                c[tm]=gk;                tm--;                gk++;            }            else if(a[tk]==b[gk])            {                if(a[tm]>b[gm])                {                    c[tm]=gm;                    tm--;                    gm--;                }                else                {                    c[tm]=gk;                    tm--;                    gk++;                }            }        }        for(i=0;i<n;i++)        {            if(a[i]>b[c[i]])                sum++;            else if(a[i]<b[c[i]])                sum--;        }        printf("%d\n",sum*200);    }    return 0;}


0 0
原创粉丝点击