思路

我们发现每次操作都会去除右下角的 11 个格子,并在右下角添加 n×nn \times n 个格子。
经过 kk 次操作后,共减少了 kk 个格子,增加了 n×n×kn \times n \times k 个格子,所以最终格子的数量是 1k+n×n×k1-k+n \times n \times k

提醒

一定要记得 mod 998244353\bmod\ 998244353
还要开 __int128 或写高精度,因为答案可能会爆 unsigned long long

代码

#include<cstdio>
__int128 n,k,ans=1;
inline __int128 read(){
    __int128 s=0,w=1;
    char ch=getchar();
    while(ch<'0'||ch > '9'){
        if(ch == '-'){
            w=-1;
        }
        ch=getchar();  
    }
    while(ch >= '0' && ch <= '9'){
        s=s*10+ch-'0';
        ch=getchar();
    }
    return s*w;
}
inline void write(__int128 x){
    if(x<0){
    	putchar('-');
		x=-x;
	}
    if(x>9){
        write(x/10);
    }
    putchar(x%10+'0');
}  
int main(){
    n=read();
    k=read();
    ans=ans-k+n*n*k;
    write(ans%998244353);
    return 0;
}

更新日志

upd 2022.2.18:快写竟然写错了,改了一下。