zoukankan      html  css  js  c++  java
  • HDU 6425 Rikka with Badminton(组合问题签到)题解

    题意:问你有多少种选法使得不能满足大于等于2个拍子且大于等于1个球。

    思路:数学组合问题,分类讨论一下,刚开始的时候分的很乱,写的乱七八糟的...还有注意MOD,基本上有大数相乘的地方都要先MOD一下,不然可能会溢出。

    代码:

    #include<set>
    #include<map>
    #include<cstdio>
    #include<utility>
    #include<cmath>
    #include<stack>
    #include<vector>
    #include<queue>
    #include<cstring>
    #include<string>
    #include<sstream>
    #include<iostream>
    #include<algorithm>
    #define ll long long
    #define ull unsigned long long
    using namespace std;
    const int maxn = 100+10;
    const int seed = 131;
    const int MOD = 998244353;
    const int INF = 0x3f3f3f3f;
    ll pow_mul(ll a,ll b){
        ll ans = 1;
        while(b){
            if(b & 1) ans = (ans * a) % MOD;
            a = (a * a) % MOD;
            b >>= 1;
        }
        return ans;
    }
    int main(){
        int T;
        scanf("%d",&T);
        ll a,b,c,d,n;    //都没,有拍,有球,都有
        while(T--){
            scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
            ll ans = 0;
            if(b) ans = (ans + (pow_mul(2,a) * (pow_mul(2,b) - 1)) % MOD) % MOD;   //只有拍
            if(c) ans = (ans + (pow_mul(2,a) * (pow_mul(2,c) - 1)) % MOD) % MOD;   //只有球
            if(b && c) ans = (ans + ((pow_mul(2,a) * (pow_mul(2,c) - 1)) % MOD) * b) % MOD;    //一拍N球
            if(d) ans = (ans + (pow_mul(2,a + c) * d) % MOD) % MOD; //一拍N球
            ans += pow_mul(2,a);    //都没有
            ans %= MOD;
            printf("%lld
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    解题:AHOI 2005 航线规划
    解题:SCOI 2008 天平
    解题:SCOI 2014 方伯伯运椰子
    解题:APIO 2008 免费道路
    解题:USACO15JAN Grass Cownoisseur
    669. 换硬币(dp动态规划)
    8. 旋转字符串
    147. 水仙花数
    1131. 排列中的函数
    78. 最长公共前缀
  • 原文地址:https://www.cnblogs.com/KirinSB/p/9507375.html
Copyright © 2011-2022 走看看