zoukankan      html  css  js  c++  java
  • A -- A. Quailty and Playing Cards 模拟 + 思考

    http://www.ifrog.cc/acm/problem/1036?contest=1005&no=0

    分类,考虑Q神出的是第一张或者是第二张,然后对手出那些牌来应付。

    Q神出第一张和第二张的情况是分开的,应该取两者的最大值。(因为要取最优情况)

    而Q神出第一张的时候,对手出任意一张,是取min,保证对手出牌最优

    注意这里花色是没用的。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define inf (0x3f3f3f3f)
    typedef long long int LL;
    
    #include <iostream>
    #include <sstream>
    #include <vector>
    #include <set>
    #include <map>
    #include <queue>
    #include <string>
    int book[500];
    struct node {
        int num, val;
    } a[40];
    int add(int val) {
        if (val != 14) return val;
        else return 1;
    }
    int judge(node a, node b, int who) {
        if (a.num > b.num) {
            return add(a.num);
        } else if (a.num == b.num) {
            if (who == 1) {
                return add(a.num);
            } else return -add(b.num);
        } else {
            return -add(b.num);
        }
    }
    void work() {
        for (int i = 1; i <= 4; ++i) {
            char str[10];
            scanf("%s", str + 1);
            a[i].num = book[str[1]];
            a[i].val = book[str[2]];
        }
    //    for (int i = 1; i <= 4; ++i) {
    //        cout << a[i].num << " " << a[i].val << endl;
    //    }
    //    cout <<"***" << endl;
        int ans = inf;
        int t = 0;
        if (judge(a[1], a[3], 1) > 0) {
            t += judge(a[1], a[3], 1);
            t += judge(a[2], a[4], 1);
        } else {
            t += judge(a[1], a[3], 1);
            t += judge(a[2], a[4], 2);
        }
        ans = min(ans, t);
        t = 0;
        if (judge(a[1], a[4], 1) > 0) {
            t += judge(a[1], a[4], 1);
            t += judge(a[2], a[3], 1);
        } else {
            t += judge(a[1], a[4], 1);
            t += judge(a[2], a[3], 2);
        }
        ans = min(ans, t);
    
        t = 0;
        int ans2 = inf;
        if (judge(a[2], a[3], 1) > 0) {
            t += judge(a[2], a[3], 1);
            t += judge(a[1], a[4], 1);
        } else {
            t += judge(a[2], a[3], 1);
            t += judge(a[1], a[4], 2);
        }
        ans2 = min(ans2, t);
        t = 0;
        if (judge(a[2], a[4], 1) > 0) {
            t += judge(a[2], a[4], 1);
            t += judge(a[1], a[3], 1);
        } else {
            t += judge(a[2], a[4], 1);
            t += judge(a[1], a[3], 2);
        }
    
        ans2 = min(ans2, t);
    
    //    cout << ans << " " << ans2 << endl;
    
        ans = max(ans, ans2);
        cout << ans << endl;
    }
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
        book['A'] = 14;
        book['K'] = 13;
        book['Q'] = 12;
        book['J'] = 11;
        book['T'] = 10;
        for (int i = '2'; i <= '9'; ++i) {
            book[i] = i - '0';
        }
        book['H'] = 4;
        book['S'] = 3;
        book['C'] = 2;
        book['D'] = 1;
        int t;
        scanf("%d", &t);
        while(t--) {
            work();
        }
        return 0;
    }
    View Code
  • 相关阅读:
    利用python 掌握机器学习的过程
    SendMessage用法
    python函数形参中的*args和**kwargs
    python 用win32修改注册表,修改打开IE浏览器的配置
    python .py .pyc .pyw .pyo .pyd区别
    代码性能提升10倍(ForkJoin)
    雪花算法生成id
    配置虚拟机
    kafka多线程消费
    Redis存储对象序列化和反序列化
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/5905749.html
Copyright © 2011-2022 走看看