贪心算法1002

题目大意:

田忌赛马。。。。若干匹马与国王的马比赛,每有一匹马大于国王的速度,赢得200,否则输200,速度相同不计,输入n为马的数目,0为结束

解题思路:

先排序,将两个速度最快的比较,如果大于国王,m++,如果小于,将最慢的与国王最快的比较,m--。如果等于,将两个最慢的比较,如果大于国王最慢的,m++,如果小于,与国王最快的比较m--,如果等于,将最慢的与国王最快的比较,m--;

代码:

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int n,i,m=0,a[1001],b[1001];
    while(cin>>n)
    {
        if(n==0)
        return 0;
        for(i=0;i<n;i++)
        cin>>a[i];
        for(i=0;i<n;i++)
        cin>>b[i];
        sort(a,a+n);
        sort(b,b+n);
        int l1=0,l2=0;int h1=n-1,h2=n-1;
        for(i=0;i<n;i++)
        {
            if(a[h1]>b[h2])
            {
                m++;
                h1--;
                h2--;
                continue;
            }
            if(a[h1]<b[h2])
            {
                m--;
                h2--;
                l1++;
                continue;
            }
            if(a[h1]==b[h2])
            {
                if(a[l1]<b[l2])
                {
                    l1++;
                    h2--;
                    m--;
                    continue;
                }
                if(a[l1]>b[l2])
                {
                    l1++;
                    l2++;
                    m++;
                    continue;
                }
                if(a[l1]==b[l2])
                {
                    if(a[l1]<b[h2])
                    {
                        m--;
                        h2--;
                        l1++;
                    }
                }
            }
        }
        cout<<m*200<<endl;
        m=0;
    }
    return 0;
}
原文地址:https://www.cnblogs.com/Sikaozhe/p/5320214.html