zoukankan      html  css  js  c++  java
  • C

    ---恢复内容开始---

    题目链接:

    https://vjudge.net/problem/1812693/origin

    这题的mod运算很恶心,真的。。。

    本题有正反两个思路,一个是正面求解其不能成立的情况,

              一个是反面求解,用total减。

    我用的是正面求解。

    一共有种情况:

      1. 全是球 :poww(2, a)*poww(2,c)-1

      2. 全是拍 : poww(2, a)*poww(2, b)-1

      3. 一拍多球(2种可能):    1 -- (poww(2, a)*poww(2, c)-1)*b(一个拍子!)

                  2 -- (poww(2, a)*poww(2,c)-1)*d

      4. 啥也没 : poww(2, a)

    加起来就好了, 由于数据很大,故而用到快速幂poww(我喜欢这样命名。。)

    下面是AC代码:

    #include <iostream>
    #include <cstdio>
    #define ll long long
    
    using namespace std;
    
    const int mod = 998244353;
    
    ll poww(ll a, ll b)
    {
        ll ans = 1, base = a;
        while(b)
        {
            if(b&1 != 0)
                ans = (ans%mod)*(base%mod);
            base = base%mod*base%mod;
            b >>= 1;
        }
        return ans%mod;
    }
    
    int main()
    {
        int T;
        scanf("%d", &T);
        while(T--)
        {
            ll ans = 0;
            ll a, b, c, d;
            scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
    
            ans = (ans+(poww(2, a)*(poww(2, b)-1)%mod))%mod; //只有拍子
            ans = (ans+(poww(2, a)*(poww(2, c)-1)%mod))%mod; //只有球
            ans = (ans+(poww(2, a)*(poww(2, c)-1)%mod*b%mod))%mod; //一拍N球
            ans = (ans+(poww(2, a)*(poww(2, c))%mod*d%mod))%mod; // 一拍N球
            ans = (ans+poww(2, a)%mod)%mod; //啥也没
    
            printf("%lld
    ", ans%mod);
        }
    }
    View Code

    如有疑问,欢迎评论指出!

    化繁为简 大巧不工
  • 相关阅读:
    SQL查询
    SQL语句
    SQL语句
    查询设计分析
    数据库引擎调整顾问
    详解执行计划
    详解索引连接类型
    查询开销
    利用SQL Profiler处理开销较大的查询
    状压dp的题目列表 (一)
  • 原文地址:https://www.cnblogs.com/mpeter/p/10289408.html
Copyright © 2011-2022 走看看