sdnu oj 1026.田忌赛马续

debug 到怀疑人生…
坑点:给的是时间, 用时越长 马越弱

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <map>
using namespace std;
int a[100006], b[100006];

bool cmp(int a, int b)
{
    return a > b;
}
int main()
{
    int n, i, al, ar, bl, br, win, lose;
    while(~scanf("%d", &n)){
        memset(a, 0, sizeof a);
        memset(b, 0, sizeof b);
        for(i = 0; i < n; i++)
            scanf("%d", &a[i]); //田忌
        for(i = 0; i < n; i++)
            scanf("%d", &b[i]);  //齐王
        sort(a, a+n, cmp);  //时间长的排前面, 从弱马开始比较
        sort(b, b+n, cmp);
        win = 0;
        al = bl = 0;   //左端点(bl hhh)
        ar = br = n-1;   //右端点
        for(i = 1; i <= n; ++i){
            if(a[al] < b[bl]){  //最弱的马 田忌 > 齐王,干脆利落赢一局
                ++win;
                ++al;
                ++bl;
            }
            else if(a[ar] < b[br]){ // 最强的马 田忌 > 齐王,干脆利落又一局
                ++win;
                --ar;
                --br;
            }
            else if(a[ar] > b[br]){ //最强的马 田忌 < 齐王,用田忌弱马输给齐王强马
               --win;
               ++al;
               --br;
            }
            else{ //强马 田忌 == 齐王 &&  弱马 田忌 <= 齐王, 田忌公举用弱马耗掉强马
                if(a[al] > b[br]) //如果弱马 田忌 < 齐王, 耗掉强马, 输一局, 如果实力相当,平局
                    --win;
                ++al; 
                --br;

            }
        }
        if(!win)
            printf("DRAW\n");
        else if(win > 0)
            printf("WIN\n");
        else
            printf("LOSE\n");
    }
    return 0;
}

发布了40 篇原创文章 · 获赞 4 · 访问量 1110

猜你喜欢

转载自blog.csdn.net/xiongshuxian2019/article/details/104597507