QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#20930#2551. Math StringQingyuAC ✓9ms13952kbC++203.0kb2022-02-21 14:53:422022-05-03 12:01:08

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2022-05-03 12:01:08]
  • 评测
  • 测评结果:AC
  • 用时:9ms
  • 内存:13952kb
  • [2022-02-21 14:53:42]
  • 提交

answer

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <string>
#include <bitset>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <algorithm>
#include <sstream>
#include <stack>
#include <iomanip>
using namespace std;
#define pb push_back
#define mp make_pair
typedef pair<int,int> pii;
typedef long long ll;
typedef double ld;
typedef vector<int> vi;
#define fi first
#define se second
#define fe first
#define FO(x) {freopen(#x".in","r",stdin);freopen(#x".out","w",stdout);}
#define Edg int M=0,fst[SZ],vb[SZ],nxt[SZ];void ad_de(int a,int b){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;}void adde(int a,int b){ad_de(a,b);ad_de(b,a);}
#define Edgc int M=0,fst[SZ],vb[SZ],nxt[SZ],vc[SZ];void ad_de(int a,int b,int c){++M;nxt[M]=fst[a];fst[a]=M;vb[M]=b;vc[M]=c;}void adde(int a,int b,int c){ad_de(a,b,c);ad_de(b,a,c);}
#define es(x,e) (int e=fst[x];e;e=nxt[e])
#define esb(x,e,b) (int e=fst[x],b=vb[e];e;e=nxt[e],b=vb[e])
int N,x[233],y[233],z[233],f[1<<12];
ll g[200][1<<12];
#define SZ 666666
const int MOD=998244353;
ll qp(ll a,ll b)
{
	ll x=1; a%=MOD;
	while(b)
	{
		if(b&1) x=x*a%MOD;
		a=a*a%MOD; b>>=1;
	}
	return x;
}
namespace linear_seq {
inline vector<int> BM(vector<int> x)
{
	vector<int> ls,cur; int lf,ld;
	for(int i=0;i<int(x.size());++i)
	{
		ll t=-x[i]%MOD;
		for(int j=0;j<int(cur.size());++j)
			t=(t+x[i-j-1]*(ll)cur[j])%MOD;
		if(!t) continue;
		if(!cur.size()) {cur.resize(i+1); lf=i; ld=t; continue;}
		ll k=-t*qp(ld,MOD-2)%MOD;
		vector<int> c(i-lf-1); c.pb(-k);
		for(int j=0;j<int(ls.size());++j) c.pb(ls[j]*k%MOD);
		if(c.size()<cur.size()) c.resize(cur.size());
		for(int j=0;j<int(cur.size());++j)
			c[j]=(c[j]+cur[j])%MOD;
		if(i-lf+(int)ls.size()>=(int)cur.size())
			ls=cur,lf=i,ld=t;
		cur=c;
	}
	vector<int>&o=cur;
	for(int i=0;i<int(o.size());++i)
		o[i]=(o[i]%MOD+MOD)%MOD;
	return o;
}
int N; ll a[SZ],h[SZ],t_[SZ],s[SZ],t[SZ];
inline void mull(ll*p,ll*q)
{
	for(int i=0;i<N+N;++i) t_[i]=0;
	for(int i=0;i<N;++i) if(p[i])
		for(int j=0;j<N;++j)
			t_[i+j]=(t_[i+j]+p[i]*q[j])%MOD;
	for(int i=N+N-1;i>=N;--i) if(t_[i])
		for(int j=N-1;~j;--j)
			t_[i-j-1]=(t_[i-j-1]+t_[i]*h[j])%MOD;
	for(int i=0;i<N;++i) p[i]=t_[i];
}
inline ll calc(ll K)
{
	for(int i=N;~i;--i) s[i]=t[i]=0;
	s[0]=1; if(N!=1) t[1]=1; else t[0]=h[0];
	for(;K;mull(t,t),K>>=1) if(K&1) mull(s,t); ll su=0;
	for(int i=0;i<N;++i) su=(su+s[i]*a[i])%MOD;
	return (su%MOD+MOD)%MOD;
}
inline int work(vector<int> x,ll n)
{
	if(n<int(x.size())) return x[n];
	vector<int> v=BM(x); N=v.size(); if(!N) return 0;
	for(int i=0;i<N;++i) h[i]=v[i],a[i]=x[i];
	return calc(n);
}
}
int main()
{ 
	vector<int> v;v.pb(0);v.pb(45);v.pb(4455);v.pb(407430);v.pb(36934785);v.pb(350210541);v.pb(427185456);v.pb(991901155);v.pb(110899952);v.pb(89411672);v.pb(401287887);v.pb(811189931);
	long long n;
	std::cin >> n;
	cout<<linear_seq::work(v,n)<<"\n";
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 3ms
memory: 3708kb

input:

1

output:

45

result:

ok answer is '45'

Test #2:

score: 0
Accepted
time: 3ms
memory: 3692kb

input:

3

output:

407430

result:

ok answer is '407430'

Test #3:

score: 0
Accepted
time: 5ms
memory: 13848kb

input:

1000000000000000000

output:

493565653

result:

ok answer is '493565653'

Test #4:

score: 0
Accepted
time: 3ms
memory: 13940kb

input:

999999999999999254

output:

963821656

result:

ok answer is '963821656'

Test #5:

score: 0
Accepted
time: 3ms
memory: 3636kb

input:

2

output:

4455

result:

ok answer is '4455'

Test #6:

score: 0
Accepted
time: 3ms
memory: 13872kb

input:

999999999999999062

output:

256461144

result:

ok answer is '256461144'

Test #7:

score: 0
Accepted
time: 3ms
memory: 3624kb

input:

4

output:

36934785

result:

ok answer is '36934785'

Test #8:

score: 0
Accepted
time: 3ms
memory: 3620kb

input:

5

output:

350210541

result:

ok answer is '350210541'

Test #9:

score: 0
Accepted
time: 1ms
memory: 3528kb

input:

6

output:

427185456

result:

ok answer is '427185456'

Test #10:

score: 0
Accepted
time: 0ms
memory: 3500kb

input:

7

output:

991901155

result:

ok answer is '991901155'

Test #11:

score: 0
Accepted
time: 4ms
memory: 3560kb

input:

8

output:

110899952

result:

ok answer is '110899952'

Test #12:

score: 0
Accepted
time: 4ms
memory: 3652kb

input:

9

output:

89411672

result:

ok answer is '89411672'

Test #13:

score: 0
Accepted
time: 3ms
memory: 3696kb

input:

10

output:

401287887

result:

ok answer is '401287887'

Test #14:

score: 0
Accepted
time: 1ms
memory: 13772kb

input:

172

output:

376377812

result:

ok answer is '376377812'

Test #15:

score: 0
Accepted
time: 3ms
memory: 13728kb

input:

238

output:

81946973

result:

ok answer is '81946973'

Test #16:

score: 0
Accepted
time: 1ms
memory: 13944kb

input:

730

output:

661959857

result:

ok answer is '661959857'

Test #17:

score: 0
Accepted
time: 0ms
memory: 13744kb

input:

684

output:

828317367

result:

ok answer is '828317367'

Test #18:

score: 0
Accepted
time: 3ms
memory: 13888kb

input:

633

output:

673539741

result:

ok answer is '673539741'

Test #19:

score: 0
Accepted
time: 3ms
memory: 13940kb

input:

897

output:

159321465

result:

ok answer is '159321465'

Test #20:

score: 0
Accepted
time: 1ms
memory: 13796kb

input:

809

output:

521464595

result:

ok answer is '521464595'

Test #21:

score: 0
Accepted
time: 6ms
memory: 13900kb

input:

302

output:

92391482

result:

ok answer is '92391482'

Test #22:

score: 0
Accepted
time: 9ms
memory: 13872kb

input:

261

output:

854903269

result:

ok answer is '854903269'

Test #23:

score: 0
Accepted
time: 2ms
memory: 13768kb

input:

497

output:

594207939

result:

ok answer is '594207939'

Test #24:

score: 0
Accepted
time: 3ms
memory: 13852kb

input:

951

output:

927809758

result:

ok answer is '927809758'

Test #25:

score: 0
Accepted
time: 0ms
memory: 13732kb

input:

980

output:

65372821

result:

ok answer is '65372821'

Test #26:

score: 0
Accepted
time: 3ms
memory: 13808kb

input:

1000

output:

971150090

result:

ok answer is '971150090'

Test #27:

score: 0
Accepted
time: 3ms
memory: 13732kb

input:

969

output:

511011493

result:

ok answer is '511011493'

Test #28:

score: 0
Accepted
time: 3ms
memory: 13940kb

input:

998

output:

549357456

result:

ok answer is '549357456'

Test #29:

score: 0
Accepted
time: 1ms
memory: 13880kb

input:

98558

output:

245733611

result:

ok answer is '245733611'

Test #30:

score: 0
Accepted
time: 0ms
memory: 13852kb

input:

35873

output:

524107440

result:

ok answer is '524107440'

Test #31:

score: 0
Accepted
time: 3ms
memory: 13848kb

input:

3015

output:

928761172

result:

ok answer is '928761172'

Test #32:

score: 0
Accepted
time: 3ms
memory: 13868kb

input:

44398

output:

339084928

result:

ok answer is '339084928'

Test #33:

score: 0
Accepted
time: 3ms
memory: 13952kb

input:

82497

output:

273305194

result:

ok answer is '273305194'

Test #34:

score: 0
Accepted
time: 3ms
memory: 13856kb

input:

81678

output:

423439974

result:

ok answer is '423439974'

Test #35:

score: 0
Accepted
time: 1ms
memory: 13744kb

input:

95002

output:

868411966

result:

ok answer is '868411966'

Test #36:

score: 0
Accepted
time: 2ms
memory: 13808kb

input:

56392

output:

127537737

result:

ok answer is '127537737'

Test #37:

score: 0
Accepted
time: 3ms
memory: 13872kb

input:

49489

output:

841113901

result:

ok answer is '841113901'

Test #38:

score: 0
Accepted
time: 3ms
memory: 13800kb

input:

57109

output:

808819191

result:

ok answer is '808819191'

Test #39:

score: 0
Accepted
time: 2ms
memory: 13772kb

input:

99674

output:

890052301

result:

ok answer is '890052301'

Test #40:

score: 0
Accepted
time: 6ms
memory: 13884kb

input:

99513

output:

147223708

result:

ok answer is '147223708'

Test #41:

score: 0
Accepted
time: 3ms
memory: 13888kb

input:

99950

output:

638000302

result:

ok answer is '638000302'

Test #42:

score: 0
Accepted
time: 6ms
memory: 13800kb

input:

99939

output:

627100241

result:

ok answer is '627100241'

Test #43:

score: 0
Accepted
time: 0ms
memory: 13848kb

input:

99904

output:

768803875

result:

ok answer is '768803875'

Test #44:

score: 0
Accepted
time: 0ms
memory: 13872kb

input:

822981260158560519

output:

500129705

result:

ok answer is '500129705'

Test #45:

score: 0
Accepted
time: 3ms
memory: 13848kb

input:

28316250878314571

output:

954707612

result:

ok answer is '954707612'

Test #46:

score: 0
Accepted
time: 3ms
memory: 13852kb

input:

779547116602636424

output:

349022088

result:

ok answer is '349022088'

Test #47:

score: 0
Accepted
time: 1ms
memory: 13740kb

input:

578223540025879436

output:

310507001

result:

ok answer is '310507001'

Test #48:

score: 0
Accepted
time: 3ms
memory: 13852kb

input:

335408917862248766

output:

399860005

result:

ok answer is '399860005'

Test #49:

score: 0
Accepted
time: 2ms
memory: 13900kb

input:

74859962623990078

output:

905924996

result:

ok answer is '905924996'

Test #50:

score: 0
Accepted
time: 3ms
memory: 13744kb

input:

252509054434733439

output:

57677315

result:

ok answer is '57677315'

Test #51:

score: 0
Accepted
time: 3ms
memory: 13872kb

input:

760713016476890622

output:

840620988

result:

ok answer is '840620988'

Test #52:

score: 0
Accepted
time: 0ms
memory: 13740kb

input:

919845426262803496

output:

929606336

result:

ok answer is '929606336'

Test #53:

score: 0
Accepted
time: 0ms
memory: 13856kb

input:

585335723211847194

output:

975973040

result:

ok answer is '975973040'

Test #54:

score: 0
Accepted
time: 1ms
memory: 13812kb

input:

999999999999999478

output:

859690282

result:

ok answer is '859690282'

Test #55:

score: 0
Accepted
time: 2ms
memory: 13948kb

input:

999999999999999902

output:

879587490

result:

ok answer is '879587490'

Test #56:

score: 0
Accepted
time: 1ms
memory: 13864kb

input:

999999999999999168

output:

585232180

result:

ok answer is '585232180'