ACM复习(59)17978 倒不了的塔

Description
Dota是Defense of the Ancients的简称,是一个dhk和yjf都很喜欢玩的游戏。虽然作为一个ACMer大部分时间都在努力地码啊码,但是,这2个大神每当听到dota这个词就会
拉着别人打dota,丧心病狂得简直令人发指!于是作为他们同学的我也遭殃了。。。
现在科普一下,dota是一开始每人选一个英雄来攻别人塔的游戏,此处省略一万字。。。里面有好多英雄可以选,什么力量型、敏捷型、智力型英雄,这些英雄还分了2个阵
型,天灾军团和近卫军团,每一个英雄都是不同的,好了,现在问题来了。
近卫军团有n个英雄,天灾军团有m个英雄,一般我们都选近卫军团,所以只能选近卫军团的英雄,但是也可以输入-ap指令,然后我们所有人都可以选近卫军团和天灾军团的
英雄了。现在我、小A、小B、dhk、yjf按顺序选英雄(共5人),理论上某人选了的英雄别人是不能选的,现在我想知道我们选的英雄有多少种可能的情况,但是我又要陪他们打
dota,所以想请14级未来的acmer来算一算。
另外,由于dhk和yjf是大神,只要他们各自输入mynameisdhk 、 mynameisyjf 别人选了的英雄他们也能选(而且不会冲突),必须连续的才能生效!

输入格式
输入由3行组成,第一行分别是n,m,k,分别代表近卫军团的英雄数,天灾军团的英雄数,是否输入了-ap指令(0代表没有输入,1代表输入了)。
第二行是一串字符s1,代表dhk输入了的字符串,若字符串包含mynameisdhk 则dhk可以选别人选了的英雄。
第三行是一串字符s2,代表yjf输入了的字符串,若字符串包含mynameisyjf 则yjf 可以选别人选了的英雄。
其中0 <= n + m <= 64, 0 <= k <= 1, s1 和 s2 的长度小于100,且只包含小写字母
(sample有2组,只是给你们看的,实际的数据是单case的,所以每组数据只有上述描述的3行)

输出格式
直接输出题目要求的情况数。

输入样例
5 50 0
mynameisdagouxiongnotdhk
niconicomynameisyjf

3 2 1
niconicomynameisyjf
mynameisdagouxiongnotdhk

输出样例
600

120

提示
需要注意的是,yjf选了C英雄,dhk选了D英雄 和 yjf选了 D 英雄,dhk选了C英雄,这是不一样的情况。


解题思路

水水

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string flag[2] = {"mynameisdhk", "mynameisyjf"};
    string s1, s2;
    int n, m, k, count, t, total = 1;
    bool f1, f2;
    
    cin >> n >> m >> k;
    cin >> s1;
    cin >> s2;
    f1 = s1.find(flag[0]) != s1.npos;
    f2 = s2.find(flag[1]) != s2.npos;
    
    t = count = k ? m + n : n;
    for(int i = 0; i < 5; i ++)
    {
        if(i == 3 && f1)
        {
            if(f2)
                total *= count;
            else
                total *= (count - 1);
        }
        else if(i == 4 && f2) 
            total *= count;
        else
        {
            total *= t;
            t --;
        }
    }
    cout << total << endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值