G. One-Dimensional Puzzle
题解,请看这里
细节
有除法的求模要求逆元
code
#include<bits/stdc++.h>
#define mod 998244353
#define ll long long
using namespace std;
inline void read(ll &x) {
x = 0;
ll flag = 1;
char c = getchar();
while(c < '0' || c > '9'){
if(c == '-')flag = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ 48);
c = getchar();
}
x *= flag;
}
inline void write(ll x)
{
if(x < 0){
putchar('-');
x = -x;
}
if(x > 9)
write(x / 10);
putchar(x % 10 + '0');
}
long long qp(long long a, long long b)
{
long long res = 1;
while (b > 0) {
if (b & 1) {
res = res * a%mod;
}
a = a * a % mod;
b >>= 1;
}
return res;
}
ll C(ll num,ll ch)
{
if(!ch)return 1;
//if(num<ch)return 0;
ch=min(ch,num-ch);
ll ans=1;
for(ll i=1;i<=ch;i++)
{
ans=ans*(num-i+1)%mod*qp(i,mod-2)%mod;
}
return ans;
}
ll g(ll x,ll y)
{
return C(x+y-1,y-1)%mod;
}
int main()
{
ll t;
read(t);
while(t--)
{
ll a,b,c,d;
read(a); read(b); read(c); read(d);
ll ans=0;
if(abs(a-b)>1)puts("0");
else
{
if(a==b)
{
if(a==0) puts((c&&d)?"0":"1");
else
{
ans = ((g(c,b+1)*g(d,a))%mod+(g(d,a+1)*g(c,b))%mod)%mod;
write(ans);
puts("");
}
}
else
{
ll e=max(a,b);
ans = (g(c,e)*g(d,e))%mod;
write(ans);
puts("");
}
}
}
/*for(int i=5;i<=10;i++)
{
cout<<g(i,i)<<endl;
cout<<C(i+i,i)<<endl;
}*/
return 0;
}

浙公网安备 33010602011771号