您的位置:首页 > 其它

hdoj--田忌赛马后传(贪心)

2016-03-26 20:18 281 查看


田忌赛马后传


Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)


Total Submission(s) : 1045   Accepted Submission(s) : 164


Font: Times New Roman | Verdana | Georgia


Font Size: ← →


Problem Description

田忌赛马相信大家都很熟悉了。。。齐王在吃过亏后洗心革面,努力钻研ACM,终于成为算法大神。他决定再次向田忌挑战,但同时他又很欣赏田忌,让他有赢的机会,于是改变了下规则:齐王和田忌各拥有n匹马,每匹马有一个速度值,快的马总是能战胜慢的马,当两匹马速度相同时为平局,现在,齐王规定每赢一场(即双方各挑出一只马决斗,用过的马不可再用)可以获得100金币,齐王要求田忌能过获得最多的金币。

田忌听到后吓的不行,TMD我只会3只马的情况,多了我脑子不够用,于是求助也是算法大神的你,你能帮他解决吗?


Input

有多组测试数据。第一行为齐王和田忌各自马的数量n(n<1000),接下来两行分别有n个整数,分别为田忌和齐王的马的速度v(v<10000)


Output

对于每组数据,输出一行表示田忌能够获得的最多的金币数。


Sample Input

3
92 83 71
95 87 74
2
20 20
20 20



Sample Output

100
0



Author

bytelin

南阳上的原题,田忌赛马,就是一个贪心,用自己弱的不能赢得马去消耗齐王比较厉害的马

#include<cstdio>
#include<cstring>
#include<queue>
#include<stack>
#include<iostream>
#include<algorithm>
using namespace std;
int a[1010],b[1010],vis[1010];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
        memset(vis,0,sizeof(vis));
        for(int i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(int i=0;i<n;i++)
        scanf("%d",&b[i]);
        sort(a,a+n);
        sort(b,b+n);
        int sum=0;
        int tjlow=0,kinglow=0;
        int tjfast=n-1,kingfast=n-1;
        int tjwin=0,kingwin=0;
        for(int i=0;i<n;i++)
        {
            if(a[tjlow]>b[kinglow])
            {
                tjwin++;
                tjlow++,kinglow++;
            }
            else if(a[tjlow]<b[kinglow])
            {
                tjlow++,kingfast--;
                kingwin++;
            }
            else
            {
                if(a[tjfast]>b[kingfast])
                {
                    tjwin++;
                    tjfast--,kingfast--;
                }
                else if(a[tjfast]<b[kingfast])
                {
                    kingwin++;
                    tjlow++,kingfast--;
                }
                else
                {
                    if(a[tjlow]<b[kingfast])
                    {
                        kingwin++;
                        tjlow++,kingfast--;
                    }
                }
            }
        }
        printf("%d\n",100*(tjwin-kingwin));
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: