Submission #49633712
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/convolution>
const int MOD=998244353;
using mint = atcoder::static_modint<MOD>;
using namespace std;
typedef long long ll;
#define rep(i,a,n) for (ll i=a;i<(ll)(n);i++)
#define per(i,a,n) for (ll i=n;i-->(ll)(a);)
ll read(){ll r;scanf("%lld",&r);return r;}
const int N=524288; // 1<<19
mint fac[N+10]={1};
mint ifac[N+10];
vector<mint> g(N+10,0); // 1/i, g(0)=0
vector<mint> f(N+10,0); // ans
vector<mint> h(N+10,0); // h[i]=f[i]/(i!i!)
// $f(s)=s!(s-1)! (g\star h)[s]$
void calc(int l,int r) { // [l,r)
assert(r-1 <= N);
if(l+1==r){
if(l == 0) {
f[0] = 1;
h[0] = 1;
}else{
f[l] *= fac[l]*fac[l-1]; // 未到点之前都是 g * h
h[l] = f[l]*ifac[l]*ifac[l];
}
return ;
}
int mid = (l+r)/2;
calc(l,mid);
// [l,mid) -> [mid,r)
vector<mint> _h;
rep(i,l,mid) _h.push_back(h[i]); // [l,mid)
vector<mint> _g;
rep(i,0,r-l) _g.push_back(g[i]); // [0,r-l)
auto res = atcoder::convolution(_h,_g);
rep(i,mid,r) f[i] += res[i-l];
calc(mid,r);
}
int main(){
rep(i,1,N+1) fac[i]=fac[i-1]*i;
ifac[N] = fac[N].pow(MOD-2);
per(i,0,N) ifac[i]=ifac[i+1]*(i+1);
rep(i,1,N+1) g[i]=ifac[i]*fac[i-1];
int n=read();
mint ans = fac[n]*fac[n] + fac[n]; // all(n!n!) - alice - bob + alice&bob(n!)
int bound = 1;
while(bound <= n) bound*=2;
calc(0, bound);
ans -= 2*f[n];
printf("%d\n",ans.val());
return 0;
}
Submission Info
| Submission Time |
|
| Task |
Ex - Count Strong Test Cases |
| User |
cromarmot |
| Language |
C++ 20 (gcc 12.2) |
| Score |
650 |
| Code Size |
1445 Byte |
| Status |
AC |
| Exec Time |
299 ms |
| Memory |
21296 KiB |
Compile Error
Main.cpp: In function ‘ll read()’:
Main.cpp:10:21: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
10 | ll read(){ll r;scanf("%lld",&r);return r;}
| ~~~~~^~~~~~~~~~~
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
650 / 650 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt |
| All |
00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 00_sample_04.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt |
| Case Name |
Status |
Exec Time |
Memory |
| 00_sample_01.txt |
AC |
13 ms |
13300 KiB |
| 00_sample_02.txt |
AC |
10 ms |
13168 KiB |
| 00_sample_03.txt |
AC |
10 ms |
13216 KiB |
| 00_sample_04.txt |
AC |
10 ms |
13204 KiB |
| 01_test_01.txt |
AC |
10 ms |
13260 KiB |
| 01_test_02.txt |
AC |
70 ms |
15632 KiB |
| 01_test_03.txt |
AC |
142 ms |
17528 KiB |
| 01_test_04.txt |
AC |
71 ms |
15632 KiB |
| 01_test_05.txt |
AC |
299 ms |
21076 KiB |
| 01_test_06.txt |
AC |
70 ms |
15536 KiB |
| 01_test_07.txt |
AC |
298 ms |
21216 KiB |
| 01_test_08.txt |
AC |
298 ms |
21192 KiB |
| 01_test_09.txt |
AC |
298 ms |
21176 KiB |
| 01_test_10.txt |
AC |
298 ms |
21164 KiB |
| 01_test_11.txt |
AC |
299 ms |
21212 KiB |
| 01_test_12.txt |
AC |
299 ms |
21144 KiB |
| 01_test_13.txt |
AC |
298 ms |
21216 KiB |
| 01_test_14.txt |
AC |
298 ms |
21296 KiB |
| 01_test_15.txt |
AC |
299 ms |
21216 KiB |
| 01_test_16.txt |
AC |
298 ms |
21080 KiB |