QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#56646 | #2551. Math String | do_while_true | AC ✓ | 3ms | 3736kb | C++ | 4.2kb | 2022-10-20 22:09:42 | 2022-10-20 22:09:46 |
Judging History
answer
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<ctime>
#include<random>
#include<assert.h>
#define pb emplace_back
#define mp make_pair
#define fi first
#define se second
#define dbg(x) cerr<<"In Line "<< __LINE__<<" the "<<#x<<" = "<<x<<'\n';
#define dpi(x,y) cerr<<"In Line "<<__LINE__<<" the "<<#x<<" = "<<x<<" ; "<<"the "<<#y<<" = "<<y<<'\n';
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int>pii;
typedef pair<ll,int>pli;
typedef pair<ll,ll>pll;
typedef pair<int,ll>pil;
typedef vector<int>vi;
typedef vector<ll>vll;
typedef vector<pii>vpii;
typedef vector<pil>vpil;
template<typename T>T cmax(T &x, T y){return x=x>y?x:y;}
template<typename T>T cmin(T &x, T y){return x=x<y?x:y;}
template<typename T>
T &read(T &r){
r=0;bool w=0;char ch=getchar();
while(ch<'0'||ch>'9')w=ch=='-'?1:0,ch=getchar();
while(ch>='0'&&ch<='9')r=r*10+(ch^48),ch=getchar();
return r=w?-r:r;
}
template<typename T1,typename... T2>
void read(T1 &x,T2& ...y){read(x);read(y...);}
const int mod=998244353;
inline void cadd(int &x,int y){x=(x+y>=mod)?(x+y-mod):(x+y);}
inline int add(int x,int y){return (x+y>=mod)?(x+y-mod):(x+y);}
inline void cdel(int &x,int y){x=(x-y<0)?(x-y+mod):(x-y);}
inline int del(int x,int y){return (x-y<0)?(x-y+mod):(x-y);}
int qpow(int x,int y){
int s=1;
while(y){
if(y&1)s=1ll*s*x%mod;
x=1ll*x*x%mod;
y>>=1;
}
return s;
}
ll n;
namespace bf{
const int N=1010;
int f[N],g[N],h[N],ctf[N],cth[N],ctg[N];
int main(){
for(int i=1;i<=n;i++){
h[i]=g[i]=add(g[i-1]*90ll%mod,qpow(9,i-1)*45ll%mod);
cth[i]=ctg[i]=qpow(9,i);
for(int j=2;j<i;j++)
cadd(h[i],1ll*h[j-1]*g[i-j]%mod),
cadd(cth[i],1ll*cth[j-1]*ctg[i-j]%mod);
f[i]=h[i];
ctf[i]=cth[i];
for(int j=2;j<i;j++)
cadd(f[i],add(1ll*f[j-1]*cth[i-j]%mod,1ll*h[i-j]*ctf[j-1]%mod)),
cadd(ctf[i],1ll*ctf[j-1]*cth[i-j]%mod);
}
cout << f[n] << '\n';
return 0;
}
}
namespace linear{
const int N=100010;
int ans[N][2],mul[N][2],sum[N][2],cnt[N][2];
int main(){
ans[1][1]=0;
mul[1][1]=45;
sum[1][1]=9;
cnt[1][1]=9;
for(int i=1;i<n;i++){
//
cadd(ans[i+1][1],ans[i][1]*9ll%mod);
cadd(sum[i+1][1],sum[i][1]*9ll%mod);
cadd(cnt[i+1][1],cnt[i][1]*9ll%mod);
cadd(mul[i+1][1],mul[i][1]*90ll%mod);
cadd(mul[i+1][1],sum[i][1]*45ll%mod);
//
cadd(ans[i+1][0],ans[i][1]*2ll%mod);
cadd(sum[i+1][0],mul[i][1]);
cadd(sum[i+1][0],cnt[i][1]);
cadd(ans[i+1][0],mul[i][1]);
cadd(cnt[i+1][0],cnt[i][1]*2ll%mod);
//
cadd(ans[i+1][1],ans[i][0]*9ll%mod);
cadd(sum[i+1][1],sum[i][0]*9ll%mod);
cadd(cnt[i+1][1],cnt[i][0]*9ll%mod);
cadd(mul[i+1][1],mul[i][0]*90ll%mod);
cadd(mul[i+1][1],sum[i][0]*45ll%mod);
}
cout << add(ans[n][1],mul[n][1]) << '\n';
return 0;
}
}
namespace ac{
const int M=8;
struct Matrix{
int a[M][M];
void mem(){
for(int i=0;i<M;i++)
for(int j=0;j<M;j++)
a[i][j]=0;
}
Matrix operator * (const Matrix &y)const{
Matrix z;z.mem();
for(int i=0;i<8;i++)
for(int j=0;j<8;j++)
for(int k=0;k<8;k++)
cadd(z.a[i][j],1ll*a[i][k]*y.a[k][j]%mod);
return z;
}
}tmp,ans;
int main(){
for(int i=0;i<8;i++)ans.a[i][i]=1;
tmp.a[0][0]=9;
tmp.a[2][2]=9;
tmp.a[3][3]=9;
tmp.a[1][1]=90;
tmp.a[2][1]=45;
//
tmp.a[0][4]=2;
tmp.a[1][6]=1;
tmp.a[3][6]=1;
tmp.a[1][4]=1;
tmp.a[3][7]=2;
//
tmp.a[4][0]=9;
tmp.a[6][2]=9;
tmp.a[7][3]=9;
tmp.a[5][1]=90;
tmp.a[6][1]=45;
--n;
while(n){
if(n&1)
ans=ans*tmp;
tmp=tmp*tmp;
n>>=1;
}
vi qwq={0,45,9,9};
int s=0;
for(int i=1;i<4;i++)
cadd(s,1ll*qwq[i]*ans.a[i][0]%mod),
cadd(s,1ll*qwq[i]*ans.a[i][1]%mod);
cout << s << '\n';
return 0;
}
}
signed main(){
#ifdef do_while_true
// assert(freopen("data.in","r",stdin));
// assert(freopen("data.out","w",stdout));
#endif
read(n);
// if(n<=1000)return bf::main();
// return linear::main();
return ac::main();
#ifdef do_while_true
cerr<<'\n'<<"Time:"<<1.0*clock()/CLOCKS_PER_SEC*1000<<" ms"<<'\n';
#endif
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3604kb
input:
1
output:
45
result:
ok answer is '45'
Test #2:
score: 0
Accepted
time: 3ms
memory: 3472kb
input:
3
output:
407430
result:
ok answer is '407430'
Test #3:
score: 0
Accepted
time: 0ms
memory: 3488kb
input:
1000000000000000000
output:
493565653
result:
ok answer is '493565653'
Test #4:
score: 0
Accepted
time: 3ms
memory: 3628kb
input:
999999999999999254
output:
963821656
result:
ok answer is '963821656'
Test #5:
score: 0
Accepted
time: 0ms
memory: 3600kb
input:
2
output:
4455
result:
ok answer is '4455'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3544kb
input:
999999999999999062
output:
256461144
result:
ok answer is '256461144'
Test #7:
score: 0
Accepted
time: 2ms
memory: 3628kb
input:
4
output:
36934785
result:
ok answer is '36934785'
Test #8:
score: 0
Accepted
time: 0ms
memory: 3632kb
input:
5
output:
350210541
result:
ok answer is '350210541'
Test #9:
score: 0
Accepted
time: 3ms
memory: 3700kb
input:
6
output:
427185456
result:
ok answer is '427185456'
Test #10:
score: 0
Accepted
time: 3ms
memory: 3548kb
input:
7
output:
991901155
result:
ok answer is '991901155'
Test #11:
score: 0
Accepted
time: 2ms
memory: 3488kb
input:
8
output:
110899952
result:
ok answer is '110899952'
Test #12:
score: 0
Accepted
time: 3ms
memory: 3484kb
input:
9
output:
89411672
result:
ok answer is '89411672'
Test #13:
score: 0
Accepted
time: 2ms
memory: 3488kb
input:
10
output:
401287887
result:
ok answer is '401287887'
Test #14:
score: 0
Accepted
time: 2ms
memory: 3488kb
input:
172
output:
376377812
result:
ok answer is '376377812'
Test #15:
score: 0
Accepted
time: 2ms
memory: 3544kb
input:
238
output:
81946973
result:
ok answer is '81946973'
Test #16:
score: 0
Accepted
time: 1ms
memory: 3604kb
input:
730
output:
661959857
result:
ok answer is '661959857'
Test #17:
score: 0
Accepted
time: 2ms
memory: 3604kb
input:
684
output:
828317367
result:
ok answer is '828317367'
Test #18:
score: 0
Accepted
time: 1ms
memory: 3716kb
input:
633
output:
673539741
result:
ok answer is '673539741'
Test #19:
score: 0
Accepted
time: 2ms
memory: 3716kb
input:
897
output:
159321465
result:
ok answer is '159321465'
Test #20:
score: 0
Accepted
time: 3ms
memory: 3716kb
input:
809
output:
521464595
result:
ok answer is '521464595'
Test #21:
score: 0
Accepted
time: 3ms
memory: 3696kb
input:
302
output:
92391482
result:
ok answer is '92391482'
Test #22:
score: 0
Accepted
time: 3ms
memory: 3576kb
input:
261
output:
854903269
result:
ok answer is '854903269'
Test #23:
score: 0
Accepted
time: 1ms
memory: 3532kb
input:
497
output:
594207939
result:
ok answer is '594207939'
Test #24:
score: 0
Accepted
time: 3ms
memory: 3544kb
input:
951
output:
927809758
result:
ok answer is '927809758'
Test #25:
score: 0
Accepted
time: 2ms
memory: 3736kb
input:
980
output:
65372821
result:
ok answer is '65372821'
Test #26:
score: 0
Accepted
time: 2ms
memory: 3624kb
input:
1000
output:
971150090
result:
ok answer is '971150090'
Test #27:
score: 0
Accepted
time: 0ms
memory: 3620kb
input:
969
output:
511011493
result:
ok answer is '511011493'
Test #28:
score: 0
Accepted
time: 2ms
memory: 3604kb
input:
998
output:
549357456
result:
ok answer is '549357456'
Test #29:
score: 0
Accepted
time: 2ms
memory: 3628kb
input:
98558
output:
245733611
result:
ok answer is '245733611'
Test #30:
score: 0
Accepted
time: 2ms
memory: 3660kb
input:
35873
output:
524107440
result:
ok answer is '524107440'
Test #31:
score: 0
Accepted
time: 2ms
memory: 3616kb
input:
3015
output:
928761172
result:
ok answer is '928761172'
Test #32:
score: 0
Accepted
time: 2ms
memory: 3552kb
input:
44398
output:
339084928
result:
ok answer is '339084928'
Test #33:
score: 0
Accepted
time: 3ms
memory: 3544kb
input:
82497
output:
273305194
result:
ok answer is '273305194'
Test #34:
score: 0
Accepted
time: 0ms
memory: 3616kb
input:
81678
output:
423439974
result:
ok answer is '423439974'
Test #35:
score: 0
Accepted
time: 1ms
memory: 3696kb
input:
95002
output:
868411966
result:
ok answer is '868411966'
Test #36:
score: 0
Accepted
time: 0ms
memory: 3716kb
input:
56392
output:
127537737
result:
ok answer is '127537737'
Test #37:
score: 0
Accepted
time: 2ms
memory: 3624kb
input:
49489
output:
841113901
result:
ok answer is '841113901'
Test #38:
score: 0
Accepted
time: 2ms
memory: 3636kb
input:
57109
output:
808819191
result:
ok answer is '808819191'
Test #39:
score: 0
Accepted
time: 2ms
memory: 3616kb
input:
99674
output:
890052301
result:
ok answer is '890052301'
Test #40:
score: 0
Accepted
time: 1ms
memory: 3608kb
input:
99513
output:
147223708
result:
ok answer is '147223708'
Test #41:
score: 0
Accepted
time: 2ms
memory: 3600kb
input:
99950
output:
638000302
result:
ok answer is '638000302'
Test #42:
score: 0
Accepted
time: 2ms
memory: 3544kb
input:
99939
output:
627100241
result:
ok answer is '627100241'
Test #43:
score: 0
Accepted
time: 2ms
memory: 3628kb
input:
99904
output:
768803875
result:
ok answer is '768803875'
Test #44:
score: 0
Accepted
time: 2ms
memory: 3612kb
input:
822981260158560519
output:
500129705
result:
ok answer is '500129705'
Test #45:
score: 0
Accepted
time: 2ms
memory: 3620kb
input:
28316250878314571
output:
954707612
result:
ok answer is '954707612'
Test #46:
score: 0
Accepted
time: 2ms
memory: 3620kb
input:
779547116602636424
output:
349022088
result:
ok answer is '349022088'
Test #47:
score: 0
Accepted
time: 3ms
memory: 3624kb
input:
578223540025879436
output:
310507001
result:
ok answer is '310507001'
Test #48:
score: 0
Accepted
time: 2ms
memory: 3548kb
input:
335408917862248766
output:
399860005
result:
ok answer is '399860005'
Test #49:
score: 0
Accepted
time: 2ms
memory: 3608kb
input:
74859962623990078
output:
905924996
result:
ok answer is '905924996'
Test #50:
score: 0
Accepted
time: 0ms
memory: 3608kb
input:
252509054434733439
output:
57677315
result:
ok answer is '57677315'
Test #51:
score: 0
Accepted
time: 2ms
memory: 3544kb
input:
760713016476890622
output:
840620988
result:
ok answer is '840620988'
Test #52:
score: 0
Accepted
time: 2ms
memory: 3600kb
input:
919845426262803496
output:
929606336
result:
ok answer is '929606336'
Test #53:
score: 0
Accepted
time: 2ms
memory: 3620kb
input:
585335723211847194
output:
975973040
result:
ok answer is '975973040'
Test #54:
score: 0
Accepted
time: 2ms
memory: 3528kb
input:
999999999999999478
output:
859690282
result:
ok answer is '859690282'
Test #55:
score: 0
Accepted
time: 2ms
memory: 3472kb
input:
999999999999999902
output:
879587490
result:
ok answer is '879587490'
Test #56:
score: 0
Accepted
time: 2ms
memory: 3700kb
input:
999999999999999168
output:
585232180
result:
ok answer is '585232180'