Submission #43669944


Source Code Expand

#include <atcoder/convolution>
#include <atcoder/modint>

#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define op(x) ((x&1)?x+1:x-1)
#define odd(x) (x&1)
#define even(x) (!odd(x))
#define lc(x) (x<<1)
#define rc(x) (lc(x)|1)
#define lowbit(x) (x&-x)
#define mp(x,y) make_pair(x,y)
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
using namespace std;
using namespace atcoder;

using mint = modint998244353;

const int MAXN = 1e5+100,mod = 998244353;

typedef vector<mint> vec;

ll n,m,K;

mint ans;
//

mint f[MAXN],pw[MAXN],sC[MAXN];

mint iv[MAXN],ivm[MAXN],prod;

mint fac[MAXN],rfac[MAXN];
mint C(ll n,ll m){
	if(n<m || m<0)return 0;
	return fac[n] * rfac[m] * rfac[n-m];
}

mint F1(ll x){
	if(x<0)return 0;
	return sC[x] - x*C(n,x+1);
}
mint F2(ll x){
	if(x<0)return 0;
	return 1 - C(n,x+1);
}


mint F1(ll L,ll R){
	R = min(R,n);
	if(L>R)return 0;
		
	return F1(R) - F1(L-1); 
}
mint F2(ll L,ll R){
	R = min(R,n);
	if(L>R)return 0;

	return F2(R) - F2(L-1);
}

namespace INV{
    vec solve(vec A,int N){
        if(N==1){
            vec ret(1);
            ret[0]=A[0].inv();
            return ret;
        }
        vec F0=solve(A,(N+1)>>1);
        A.resize(N,0);
        A=convolution(A,F0);A.resize(N,0);
        A=convolution(A,F0);A.resize(N,0);
        F0.resize(N,0);
        rep(i,0,N-1)F0[i]=F0[i]*2-A[i];
        return F0;
    }  
};
vec inv(vec p,int N){return INV::solve(p,N+1);}

mint b[MAXN]; //伯努利数

namespace Poly{
	void calc_b(){
		vec x(n+2),B(n+2),F(n+2);
		x[0] = 1;
		rep(i,1,n+2)x[i-1] = rfac[i];

		x = inv(x,n+1);
		rep(i,0,n+1){

			B[i] = x[i];
			F[i] = ((mint)(m+1)).pow(i+1) * rfac[i+1];
		}
		F = convolution(F,B);

		rep(i,0,n){
			mint psum = fac[i] * F[i];

			ans += f[i]*psum;
		}
	}

	void calc(){
		calc_b();
	}
};

int main(){
	cin>>n>>m;

	K = n+5;

	iv[0] = 1;
	rep(i,1,K)iv[i] = iv[i-1] / i;

	if(m > K){
		prod = 1;
		rep(i,1,K)prod = prod * (m-1-i),ivm[i] = iv[i-1] * iv[K-i] / (m-1-i);
	}

	
	pw[0] = 1;rep(i,1,n)pw[i] = pw[i-1] * m;

	fac[0] = 1;rep(i,1,n+5)fac[i] = fac[i-1] * i;
	rep(i,0,n+5)rfac[i] = fac[i].inv();
	
	sC[0] = 1;
	rep(i,1,n)sC[i] = sC[i-1] + C(n,i);
	
	
	//求出多项式f
	vec A(n+1),B(n+1);
	
	rep(j,0,n){
		ll L = max(1LL,n-2*j),R = n;
		mint x = (F1(L+j,R+j) - j*F2(L+j,R+j)) * fac[n-j];

		A[j] = x;		
	}
	rep(i,0,n){
		if(i&1)B[i] = -rfac[i];
		else B[i] = rfac[i]; 
	}
	

	A = convolution(A,B);
	
	rep(i,0,n){
		f[i] = A[i] * pw[n-i] * rfac[n-i];
	}

	//计算
	
	Poly::calc();

	//
	ll S = (m*(m+1)/2)%mod;
	mint ret = m;ret = ret.pow(n-1);

	ret = ret * S * n;

	ans = ret-ans;
	cout<<ans.val()<<endl;
	
    return 0;
}

Submission Info

Submission Time
Task F - Many Increasing Problems
User Crying
Language C++ (GCC 9.2.1)
Score 1100
Code Size 2871 Byte
Status AC
Exec Time 130 ms
Memory 16452 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1100 / 1100
Status
AC × 4
AC × 26
Set Name Test Cases
Sample example_00.txt, example_01.txt, example_02.txt, example_03.txt
All example_00.txt, example_01.txt, example_02.txt, example_03.txt, test_00.txt, test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt
Case Name Status Exec Time Memory
example_00.txt AC 9 ms 6772 KB
example_01.txt AC 7 ms 6676 KB
example_02.txt AC 4 ms 6768 KB
example_03.txt AC 124 ms 16336 KB
test_00.txt AC 22 ms 7596 KB
test_01.txt AC 7 ms 6884 KB
test_02.txt AC 48 ms 10520 KB
test_03.txt AC 62 ms 11336 KB
test_04.txt AC 114 ms 16216 KB
test_05.txt AC 5 ms 6700 KB
test_06.txt AC 114 ms 16280 KB
test_07.txt AC 130 ms 16364 KB
test_08.txt AC 118 ms 16276 KB
test_09.txt AC 118 ms 16392 KB
test_10.txt AC 115 ms 16272 KB
test_11.txt AC 113 ms 16200 KB
test_12.txt AC 115 ms 16276 KB
test_13.txt AC 113 ms 16452 KB
test_14.txt AC 120 ms 16348 KB
test_15.txt AC 114 ms 16352 KB
test_16.txt AC 62 ms 10524 KB
test_17.txt AC 84 ms 13824 KB
test_18.txt AC 86 ms 15344 KB
test_19.txt AC 7 ms 6672 KB
test_20.txt AC 5 ms 6776 KB
test_21.txt AC 6 ms 6696 KB