• 【t068】智慧碑


    Time Limit: 1 second
    Memory Limit: 128 MB

    【问题描述】

    DIABLO魔王和Mini都有三种属性,体力点,攻击点,以及集气点。
    两人的攻击方式是这样的:采用回合制。
    DIABLO先攻,DIABLO只会攻击,每次攻击可以伤害Mini W点体力点,且DIABLO每攻击一次集气点都会增加10点。
    Mini每回合可以选择攻击或者集气,选择攻击则可以伤害DIABLO Q点体力点,但是集气点不会增加。选择集气则可以增加Mini 20点
    的集气点。
    注意,当Mini连续攻击次数>=5时,他必须要集气一次。
    两人攻击的共同点是,当集气点>=100时必须要发出必杀绝招,DIABLO的必杀绝招可以伤害Mini 15点体力点,而Mini的必杀绝招可以
    伤害DIABLO 25点的体力点。每次发完必杀绝招,都需要消耗100点集气点。(必杀绝招也算攻击一次,如果集气点>=100时,即
    使连续攻击次数>=5,也要放必杀绝招,直到集气点<100)
    为了提前打好准备,Mini决定先知道自己有多少种不同的攻击方式可以获得胜利。注意,只要DIABLO体力点<=0就判定Mini这种攻击
    方式可以获得胜利,如果Mini的体力点<=0就判定Mini这种攻击方式不可以获得胜利。如果没有一种攻击方式能打败DIABLO则输
    出“No answer”(引号不输出)
    【输入格式】

    两行。
    第一行三个数A,W,K,用空格隔开,A表示DIABLO的初始体力点(1<=A<=1000),W表示DIABLLO的攻击点(47<=W<=500),K表示DIABLLO的
    初始集气点(0<=K<=500);
    第一行三个数B,Q,P,用空格隔开,B表示Mini的初始体力点(1<=B<=1000),Q表示Mini的攻击点(0<=Q<=500),P表示Mini的初始集气
    点(0<=P<=5000)
    【输出格式】

    一个数,表示Mini有多少种不同的攻击方式可以获胜。 无法获胜输出“No answer”(引号不输出)。

    Sample Input

    100 96 3
    53 6 7

    Sample Output

    No answer

    Sample Input2

    100 42 5
    200 48 47

    Sample Output2

    4

    【题目链接】:http://noi.qz5z.com/viewtask.asp?id=t068

    【题解】

    根据所给的规则,可以写两个void;
    互相调用;
    模拟回合制游戏的过程;
    先判断有没有挤满气;
    挤满气了就放大招;
    如果没有集满气
    对于大魔王,它就只能攻击;
    对于人物,它能攻击和集气;
    写个dfs就好

    【完整代码】

    #include <cstdio>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define rep1(i,a,b) for (int i = a;i <= b;i++)
    #define rep2(i,a,b) for (int i = a;i >= b;i--)
    #define mp make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define rei(x) scanf("%d",&x)
    #define rel(x) scanf("%I64d",&x)
    
    typedef pair<int,int> pii;
    typedef pair<LL,LL> pll;
    
    const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
    const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
    const double pi = acos(-1.0);
    const int MAXN = 110;
    
    int a,w,k,ans = 0;
    int b,q,p;
    
    void diablo(int,int,int,int,int);
    void mini(int,int,int,int,int);
    
    void diablo(int x1,int x2,int q1,int q2,int lx)
    {
        if (x1<=0)
        {
            ans++;
            return;
        }
        if (q1>=100)
            mini(x1,x2-15,q1-90,q2,lx);
        else
            mini(x1,x2-w,q1+10,q2,lx);
    }
    
    void mini(int x1,int x2,int q1,int q2,int lx)
    {
        if (x2<=0)
            return;
        if (q2>=100)
            diablo(x1-25,x2,q1,q2-100,lx+1);
        else
        {
            if (lx>=5)
                diablo(x1,x2,q1,q2+20,0);
            else
            {
                diablo(x1,x2,q1,q2+20,0);
                diablo(x1-q,x2,q1,q2,lx+1);
            }
        }
    }
    
    int main()
    {
        //freopen("F:\rush.txt","r",stdin);
        rei(a);rei(w);rei(k);
        rei(b);rei(q);rei(p);
        diablo(a,b,k,p,0);
        if (ans==0)
            puts("No answer");
        else
            printf("%d
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    【Python】表白代码
    有关加密技术的概述,黑客是如何破解加密数据?
    Kali Linux的发展史,专为数字取证和渗透测试而设计
    在Wi-Fi路由器中发现了新的安全漏洞
    太可怕!看看黑客是怎样利用社会工程学窃取你的密码?
    不可不知!未来警惕被黑客植入微芯片
    什么是计算机漏洞,为什么会有漏洞呢?
    揭秘人工智能将如何影响今天的工作
    Linux为程序员添加了行为准则
    不可不知!4种常见的黑客攻击手段
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7626646.html
Copyright © 2020-2023  润新知