QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#619753#8635. 圆bugmaker3243100 ✓27ms200296kbC++232.3kb2024-10-07 15:16:222024-10-07 15:16:27

Judging History

你现在查看的是最新测评结果

  • [2024-10-07 15:16:27]
  • 评测
  • 测评结果:100
  • 用时:27ms
  • 内存:200296kb
  • [2024-10-07 15:16:22]
  • 提交

answer

#include<bits/stdc++.h>
#define N 5005
//#define gc() (iS==iT?(iT=(iS=ibuf)+fread(ibuf,1,SIZE,stdin),(iS==iT?EOF:*iS++)):*iS++)
#define gc() getchar()
#define fi first
#define se second
#define Kamisato return
#define Ayaka 0;
#define int long long
//#define CHECK_MEMORY ___JQH___
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const int inf=1e9,mod=998244353;
const ll INF=2e18;
bool Memory_Begin;
namespace IO{const int SIZE=(1<<21)+1;char ibuf[SIZE],*iS,*iT,obuf[SIZE],*oS=obuf,*oT=oS+SIZE-1,c,qu[55];int f,qr;inline void flush(){fwrite(obuf,1,oS-obuf,stdout),oS=obuf,fflush(stdout);}inline void putc(char x){*oS++=x;if(oS==oT)flush();}template <class I>inline void read(I &x){for(f=1,c=gc();c<'0'||c>'9';c=gc())if(c=='-')f=-1;for(x=0;c<='9'&&c>='0';c=gc())x=x*10+(c&15);x*=f;}template <class I>inline void print(I x){if(!x)putc('0');if(x<0)putc('-'),x=-x;while(x)qu[++qr]=x%10+'0',x/=10;while(qr)putc(qu[qr --]);}inline void reads(string &s){s.clear();for(c=gc();c<33||c>126;)c=gc();for(;c>=33&&c<=126;c=gc())s.push_back(c);}inline void prints(string s){for(char c:s)putc(c);}struct Flusher_ {~Flusher_(){flush();}}io_flusher_;}
using IO::read;using IO::putc;using IO::print;using IO::reads;using IO::prints;
template<class I>I updiv(I x,I y){return (x%y==0?x/y:x/y+1);}
template<class I>bool cmin(I &x,I y){if(x>y)return x=y,1;return 0;}
template<class I>bool cmax(I &x,I y){if(x<y)return x=y,1;return 0;}
int qpow(int x,int n){int r=1;for(;n;n>>=1,x=(ll)x*x%mod)if(n&1)r=(ll)r*x%mod;return r;}

int n,f[N][N],g[N],fac[N],ans;
bool Memory_End;
signed main()
{
#ifdef CHECK_MEMORY
	cerr<<"Memory: "<<(&Memory_End-&Memory_Begin)/1048576.0<<" MiB\n";
#endif
	read(n);
	fac[0]=1;
	for(int i=1;i<=n;i++) fac[i]=(ll)fac[i-1]*i%mod;
	if(n==3) return print(1),0;
	if(n==4) return print(2),0;
	n--;
	f[1][1]=f[1][2]=f[1][3]=1;
	for(int i=2;i<=n;i++)
		for(int j=i;j<=n;j++)
			f[i][j]=((ll)f[i-1][j-1]+f[i-1][j-2]+(j>=3?f[i-1][j-3]:0))%mod;
	for(int i=1;i<=n;i++) g[i]=((ll)f[i][n-1]+f[i-1][n-1]+f[i][n-2]+f[i-1][n-2]+f[i-1][n-3])%mod;
	for(int i=1;i<=n;i++) ans=(ans+((ll)g[i]*fac[i]%mod*fac[n-i]%mod-(ll)g[i-1]*fac[i-1]%mod*fac[n-(i-1)]%mod+mod)*i%mod)%mod;
	print(((ll)ans*qpow(fac[n],mod-2)%mod+1)%mod);
	Kamisato Ayaka
}

Details

Tip: Click on the bar to expand more detailed information

Pretests


Final Tests

Test #1:

score: 10
Accepted
time: 0ms
memory: 5600kb

input:

3

output:

1

result:

ok 1 number(s): "1"

Test #2:

score: 10
Accepted
time: 0ms
memory: 5600kb

input:

4

output:

2

result:

ok 1 number(s): "2"

Test #3:

score: 10
Accepted
time: 1ms
memory: 5696kb

input:

6

output:

299473309

result:

ok 1 number(s): "299473309"

Test #4:

score: 10
Accepted
time: 1ms
memory: 5708kb

input:

10

output:

487238321

result:

ok 1 number(s): "487238321"

Test #5:

score: 10
Accepted
time: 1ms
memory: 9872kb

input:

100

output:

41620761

result:

ok 1 number(s): "41620761"

Test #6:

score: 10
Accepted
time: 0ms
memory: 13904kb

input:

200

output:

208771764

result:

ok 1 number(s): "208771764"

Test #7:

score: 10
Accepted
time: 3ms
memory: 24364kb

input:

500

output:

888621375

result:

ok 1 number(s): "888621375"

Test #8:

score: 10
Accepted
time: 27ms
memory: 194424kb

input:

4798

output:

319137015

result:

ok 1 number(s): "319137015"

Test #9:

score: 10
Accepted
time: 16ms
memory: 199468kb

input:

4999

output:

818467659

result:

ok 1 number(s): "818467659"

Test #10:

score: 10
Accepted
time: 24ms
memory: 200296kb

input:

5000

output:

142907477

result:

ok 1 number(s): "142907477"