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;
    }
    
  • 相关阅读:
    System.Net.Http.HttpClient POST 未能创建 SSL/TLS 安全通道
    SQL Server用户权限查询
    IIS 7 Deploy .Net Framework 4.8 Application
    System.Net.Http.HttpClient 模拟登录并抓取弹窗数据
    HtmlAgilityPack Sample
    嵌套 struct & class 的遍历
    SQL循环插入测试数据
    windows文本转语音 通过java 调用python 生成exe可执行文件一条龙
    Centos8 删除了yum.repos.d 下面的文件
    nacos 配置
  • 原文地址:https://www.cnblogs.com/xyq0220/p/13804565.html
Copyright © 2011-2022 走看看