HDU Rikka with Badminton(快速幂+思维)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37360631/article/details/81873649

这里写图片描述

#include<bits/stdc++.h>
#define Mod 998244353
typedef long long ll;
using namespace std;
int T,a,b,c,d,ans;
ll Pow(ll x,ll n)
{
    ll res=1;
    while(n>0)
    {
       if(n%2==1)    
       {
            res=res*x%Mod;
       }
       x=x*x%Mod;
       n>>=1;
    }
    return res;    
}

int main(){
    cin>>T;
    while(T--){
        cin>>a>>b>>c>>d;
        ll x=(b+d+1)*Pow(2,a+c);
        ll y=Pow(2,a+b);
        ll z=(b+1)*Pow(2,a);
        ll ans=(x%Mod+y%Mod-z%Mod)%Mod;

//        ll x=(Pow(2,b)-b-1)*(Pow(2,c)-1)*Pow(2,a);
//        ll y=d*(Pow(2,b)-1)*Pow(2,a+c);
//        ll z=(Pow(2,d)-1-d)*(Pow(2,a+b+c));
//        ll q=Pow(2,a+b+c+d);
//        
//        ans=q-x-y-z;
//        if(d>=2&&b>=2){
//            ll tmp=x+y+z;
//            ans=q-tmp;
//        }
//        else if(d>=2 &&b==1){
//            ll tmp=y+z;
//            ans=q-tmp;
//        }
//        
//        else if(d>=2 &&b==0){
//            ans=q-z;
//        }
//        
//        else if(d==1 &&b>=2){
//            ans=q-x-y;
//        }
//        else if(d==0 &&b>=2){
//            ans=q-x;
//        }
//        else if(d=1&&b==1){
//            ans=q-pow(2,a+c);
//        }
//        else{
//            ans=q;
//        }
        if(ans<0) ans+=Mod;
        cout<<ans<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37360631/article/details/81873649
今日推荐