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 |
|
|
| 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 |