zoukankan      html  css  js  c++  java
  • 2020牛客暑期多校训练营(第十场)D-Hearthstone Battlegrounds 贪心模拟

    Hearthstone Battlegrounds

    题意

    你和盆友玩一个游戏,有四种鱼人:

    1. 剧毒圣盾亡语
    2. 剧毒圣盾
    3. 剧毒亡语
    4. 剧毒

    鱼人的血量都为(10^9),攻击力都为(1)

    藤曼的血量和攻击力均为(1)

    带有剧毒的鱼人的攻击可以秒杀敌人,圣盾可以抵挡一次攻击,带有亡语的鱼人死后可以召唤出一个藤曼。每回合你可以选择一个随从和对方的一个随从战斗,攻击是双向的,即双方的随从都会受到对方随从的攻击。

    分析

    贪心的想法就是尽量用藤曼去消耗敌方带圣盾的鱼人,具体为:

    • 若敌方有藤曼,优先用鱼人攻击藤曼,其次用藤曼
    • 若敌方有带圣盾的鱼人
      • 若我方有藤曼,用藤曼去攻击(1、2)(顺序表示优先级)号鱼人,否则用(3、1)号鱼人去攻击对方的(3、4、1、2)号鱼人
    • 若敌方没有带圣盾的鱼人,那么只要优先使用鱼人来攻击对方的随从,其次用藤曼即可。

    Code

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1e5+10;
    int T;
    int a[5],b[5];
    int ck(){
        int flag=1;
        for(int i=0;i<5;i++) if(a[i]!=0) flag=0;
        if(flag) return 0;
        flag=1;
        for(int i=0;i<5;i++) if(b[i]!=0) flag=0;
        if(flag) return 1;
        return 2;
    }
    void attack(int u,int x){
        if(u==0){
            if(x==0||x==1){
                --a[x];
                ++a[x+2];
            }else if(x==2){
                --a[x];
                ++a[4];
            }else --a[x];
        }else{
            if(x==0||x==1){
                --b[x];
                ++b[x+2];
            }else if(x==2){
                --b[x];
                ++b[4];
            }else --b[x];
        }
    }
    void solve(){
        if(b[2]) attack(1,2);
        else if(b[3]) attack(1,3);
        else if(b[0]) attack(1,0);
        else if(b[1]) attack(1,1);    
    }
    int main(){
        scanf("%d",&T);
        while(T--){
            a[4]=b[4]=0;
            for(int i=0;i<4;i++){
                scanf("%d",&a[i]);
            }
            for(int i=0;i<4;i++){
                scanf("%d",&b[i]);
            }
            while(ck()==2){
                int flag=0;
                for(int i=0;i<4;i++) if(a[i]) flag=1;
                if(flag&&b[4]){
                    attack(1,4);
                    continue;
                }
                if(a[4]&&(b[0]||b[1])){
                    attack(0,4);
                    if(b[0]) attack(1,0);
                    else if(b[1]) attack(1,1);
                }else if(a[2]){
                    attack(0,2);
                    solve();
                }else if(a[0]){
                    attack(0,0);
                    solve();
                }else if(a[1]){
                    attack(0,1);
                    solve();
                }else if(a[3]){
                    attack(0,3);
                    solve();
                }else{
                    --a[4];
                    if(b[4]) --b[4];
                };
            }
            if(ck()==0){
                puts("No");
            }else puts("Yes");
        }
        return 0;
    }
    
  • 相关阅读:
    idea启动tomcat服务失败
    500错误 javax.servlet.ServletException: javax.naming.NameNotFoundException: Name [happy] is not bound in this Context. Unable to find [happy].
    idea启动tomcat服务失败 SEVERE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild:
    浅谈注解式开发
    PTA编程总结3
    PTA编程总结2
    PTA编程总结1
    秋季学期学习总结
    Git简明教程
    Linux常用软件安装
  • 原文地址:https://www.cnblogs.com/xyq0220/p/13804565.html
Copyright © 2011-2022 走看看