1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #include<bits/stdc++.h> #define I inline #define W while #define RI register int #define Cn const #define CI Cn int& #define gc getchar #define pc putchar #define int long long using namespace std; I void read(int& x){RI f=1;char c=gc();x=0;W(!('0'<=c&&c<='9')) f=c^'-'?f:-1,c=gc();W('0'<=c&&c<='9') x=x*10+(c-'0'),c=gc();x*=f;} I void write(int x){x<0&&(pc('-'),x=-x),x>=10&&(write(x/10),0),pc(x%10+'0');} Cn int N=510,P=998244353,Inv6=(P+1)/6; int Tt,sx,sy,tx,ty,Ans; signed main(){ read(Tt);W(Tt--){ read(sx),read(sy),read(tx),read(ty); #define LS(x) ((x)*((x)+1)%P*(2*(x)+1)%P*Inv6%P) #define Sqr(x) ((x)*(x)%P) #define CX(sx,sy,tx,ty) (sy<ty?(LS(ty)-LS(sy)+Sqr(sy)-Sqr(ty)+Sqr(sx)*(ty-sy)%P):(LS(sy)-LS(ty)+Sqr(sx)*(sy-ty))) #define CY(sx,sy,tx,ty) (sx<tx?(LS(tx)-LS(sx)+Sqr(sx)-Sqr(tx)+Sqr(sy)*(tx-sx)%P):(LS(sx)-LS(tx)+Sqr(sy)*(sx-tx))) #define CZ(sx,sy,tx,ty) (sx<tx?(2*(LS(tx)-LS(sx))-Sqr(tx)+Sqr(sx)+2*(LS(tx)-LS(sx)-Sqr(tx)+Sqr(sx))%P):(2*(LS(sx)-LS(tx))-Sqr(sx)+Sqr(tx)+2*(LS(sx)-LS(tx))%P)) Ans=(Sqr(tx)*Sqr(ty)%P-Sqr(sx)*Sqr(sy))%P; if(sx==tx){Ans+=CX(sx,sy,tx,ty);}else if(sy==ty){Ans+=CY(sx,sy,tx,ty);}else if(sx==sy&&tx==ty){Ans+=CZ(sx,sy,tx,ty);}else if(sx<tx){ if(sy>=ty) (Ans+=(CX(sx,sy,sx,ty)+CY(sx,ty,tx,ty))%P)%=P;else if(sx>=sy&&tx>=ty) (Ans+=(sx<=ty?(CX(sx,sy,sx,sx)+CZ(sx,sx,ty,ty)+CY(ty,ty,tx,ty)):(CX(sx,sy,sx,ty)+CY(sx,ty,tx,ty)))%P)%=P;else if(sx< sy&&tx< ty) (Ans+=(sy<=tx?(CY(sx,sy,sy,sy)+CZ(sy,sy,tx,tx)+CX(tx,tx,tx,ty)):(CY(sx,sy,tx,sy)+CX(tx,sy,tx,ty)))%P)%=P;else if(sx>=sy&&tx< ty) (Ans+=(CX(sx,sy,sx,sx)+CZ(sx,sx,tx,tx)+CX(tx,tx,tx,ty))%P)%=P;else if(sx< sy&&tx>=ty) (Ans+=(CY(sx,sy,sy,sy)+CZ(sy,sy,ty,ty)+CY(ty,ty,tx,ty))%P)%=P; }else{ if(sy<=ty) (Ans+=(CY(sx,sy,tx,sy)+CX(tx,sy,tx,ty))%P)%=P;else if(sx>=sy&&tx>=ty) (Ans+=(sy<=tx?(CY(sx,sy,tx,sy)+CX(tx,sy,tx,ty)):(CY(sx,sy,sy,sy)+CZ(sy,sy,tx,tx)+CX(tx,tx,tx,ty)))%P)%=P;else if(sx< sy&&tx< ty) (Ans+=(sx<=ty?(CX(sx,sy,sx,ty)+CY(sx,ty,tx,ty)):(CX(sx,sy,sx,sx)+CZ(sx,sx,ty,ty)+CY(ty,ty,tx,ty)))%P)%=P;else if(sx>=sy&&tx< ty) (Ans+=(CY(sx,sy,sy,sy)+CZ(sy,sy,ty,ty)+CY(ty,ty,tx,ty))%P)%=P;else if(sx< sy&&tx>=ty) (Ans+=(CX(sx,sy,sx,sx)+CZ(sx,sx,tx,tx)+CX(tx,tx,tx,ty))%P)%=P; }write((Ans+P)%P),pc('\n'); } }
|