QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#20930 | #2551. Math String | Qingyu | AC ✓ | 9ms | 13952kb | C++20 | 3.0kb | 2022-02-21 14:53:42 | 2022-05-03 12:01:08 |
Judging History
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'