• 17978 倒不了的塔 注意题目


    17978 倒不了的塔

    时间限制:1000MS  内存限制:65535K
    提交次数:314 通过次数:39 收入:126

    题型: 编程题   语言: G++

     

    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英雄,这是不一样的情况。



     

    来源

     jerrywanglaoji 

     

    作者

     201230720309

    2 29 1
    asdfmynameisdhkwer
    asdfwmynameisyjk

    因为这5个人选英雄是有顺序的,所以不能普通的计数,要分成4类。就是看dhk和yjf有没用技能。

    1、如果都用了,那么就是前三个全排,后面,dnk和yjf都无视其他人,所以乘上all * all

    2、如果只有dnk用了,注意dnk是第四个人选的,考虑上面,如果它选的和前3个人一样,那么yjf就有28个人选,如果不一样,yjf就是有27个人了,ans = 31 * 30 * 29 * 3 * 28 + 31 * 30 * 29 * 28 * 27

    3、如果只是yjf用了,没影响,A(all, 4) * all,因为它最后才选。

    4、都没选,就直接全排。

    不要认为人数小于5就是0,比如有3个人,但是dhk和yjf都用了技能。

    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #define IOS ios::sync_with_stdio(false)
    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>
    char dnk[] = "mynameisdhk";
    char yjf[] = "mynameisyjf";
    char str1[1000];
    char str2[1000];
    LL A(int n, int m) {
        if (n < m) return 0;
        LL ans = 1;
        for (int i = 1; i <= m; ++i) {
            ans *= n - i + 1;
        }
        return ans;
    }
    void work() {
        int n, m, k;
        cin >> n >> m >> k;
        cin >> str1 + 1 >> str2 + 1;
        bool flag1 = false;
        bool flag2 = false;
        if (strstr(str1 + 1, dnk) != NULL) flag1 = true;
        if (strstr(str2 + 1, yjf) != NULL) flag2 = true;
    //    cout << flag1 << " " << flag2 << endl;
    //    cout << A(64, 3) << endl;
        int all = n;
        if (k) all += m;
    //    if (all < 5) {
    //        cout << 0 << endl;
    //        return;
    //    }
        LL ans = 0;
        if (flag1 && flag2) {
            ans = A(all, 3) * all * (all);
        } else if (flag1 && !flag2) {
            ans = A(all, 4) * (all - 1);
        } else if (!flag1 && flag2){
            ans = A(all, 4) * all;
        } else {
            ans = A(all, 5);
        }
        cout << ans << endl;
    }
    
    int main() {
    #ifdef local
        freopen("data.txt","r",stdin);
    #endif
        work();
        return 0;
    }
    View Code
  • 相关阅读:
    【CUDA开发】 Check failed: error == cudaSuccess (8 vs. 0) invalid device function
    【CUDA开发】 Check failed: error == cudaSuccess (8 vs. 0) invalid device function
    【神经网络与深度学习】【CUDA开发】服务器(多GPU)caffe安装和编译
    【神经网络与深度学习】【CUDA开发】服务器(多GPU)caffe安装和编译
    【神经网络与深度学习】Win10+VS2015 caffe环境搭建(极其详细)
    【神经网络与深度学习】Win10+VS2015 caffe环境搭建(极其详细)
    【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题
    【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题
    【VS开发】【视频开发】利用ffmpeg+opencv实现画中画
    【VS开发】【视频开发】利用ffmpeg+opencv实现画中画
  • 原文地址:https://www.cnblogs.com/liuweimingcprogram/p/6079505.html
Copyright © 2020-2023  润新知