题意:
学生既没有球拍也没有球,b学生只有球拍,c学生只有球,d学生同时有球拍和球。俱乐部将组织学生打羽毛球。每个学生都可以选择自由参加。因此,有可能的注册状态。要打羽毛球,必须至少有两名学生有球拍,至少有一名学生有球。因此,如果没有足够的球或球拍,活动将失败。
现在,Rikka想要计算所有可能的注册状态中的状态数,这将使活动失败。 求失败的数量
这道题可以分解来看,对于a自己本身,假设a是2的话,那么a可以取0(代表没人报名), 1 , 2 ,或者1和2同时报名,所以对于 a=2时就有种情况,,也就是
现在分情况来取,如果全都不取的话就是
只取一类人的话,对于a,b,c来说,不管取多少个,都无法参加,而对于d来说只要超过两个人就可以参加,所以就是
为什么这里减了一,,因为我们把0的情况在前面取好了
如果同时取两类人,对于a,b和a,c来说,怎么取都无所谓,a,d的话d只能取一人,b,c也是b只能取一人,c,d也是d只能取一人,所以就是
如果同时取三类人,对于a,b,c和a,c,d来说,b和d只能取一个,而b,c,d不可取,所以就是
四类人在一起的话也不满足,,所以答案就是以上几种的总和
#include<bits/stdc++.h>
using namespace std;
const long long mod=998244353;
long long quick(long long a,long long times){
long long ans=1;
while(times){
if(times&1){
ans=ans*a%mod;
}
a=a*a%mod;
times/=2;
}
return ans;
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
long long a,b,c,d;
scanf("%lld %lld %lld %lld",&a,&b,&c,&d);
long long ans=0;
long long powa=quick(2,a)-1;
long long powb=quick(2,b)-1;
long long powc=quick(2,c)-1;
ans=(1+powa+powb+powc+d+(powa*powb)%mod+(powa*powc)%mod+(powa*d)%mod+ (powc*d)%mod+(b*powc)%mod+((powa*powc)%mod*b)%mod+((powa*powc)%mod*d)%mod)%mod;
printf("%lld\n",ans);
}
}
//样例
//2 2 2 2
//1+3+3+3+2+3*3+3*3+3*2+3*2+3*2+3*3*2+3*3*2
//12+9+9+6+6+6+18+18
//84