QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#82594 | #2551. Math String | woxiangbaile# | AC ✓ | 2ms | 2904kb | C++ | 3.5kb | 2023-02-28 12:30:51 | 2023-02-28 12:30:55 |
Judging History
answer
#include <cstdio>
#include <vector>
#define rep(i, d, u) for(int i = d; i <= u; ++i)
#define dep(i, u, d) for(int i = u; i >= d; --i)
int ured() {
int re = 0;
char ch;
do {
ch = getchar();
} while('9' < ch || ch < '0');
do {
re = re * 10 + (ch ^ '0');
} while('0' <= (ch = getchar()) && ch <= '9');
return re;
}
long long lred() {
long long re = 0;
char ch;
do {
ch = getchar();
} while('9' < ch || ch < '0');
do {
re = re * 10 + (ch ^ '0');
} while('0' <= (ch = getchar()) && ch <= '9');
return re;
}
void uwit(int da) {
int ch[21], cn = 0;
do {
ch[++cn] = da - da / 10 * 10;
} while(da /= 10);
do {
putchar('0' ^ ch[cn]);
} while(--cn);
}
const int _maxn = 10011, _mods = 998244353;
int qinv(int da) {
int re = 1, up = _mods - 2;
while(up) {
if(up & 1) {
re = 1ll * re * da % _mods;
}
da = 1ll * da * da % _mods, up >>= 1;
}
return re;
}
int n = 20, p[_maxn], cans[_maxn], fans[_maxn], rans;
long long m;
std :: vector<int> dans;
std :: vector<int> fqbm(int *da, int cn) {
std :: vector<int> re, lt;
int dw = -1, dt, ml, rg;
rep(i, 0, cn - 1) {
rg = 0;
rep(j, 1, re . size()) {
rg = (1ll * da[i - j] * re[j - 1] + rg) % _mods;
}
if(rg == da[i]) {
} else if(dw == -1) {
dw = i;
if((dt = da[i] - rg) < 0) {
dt += _mods;
}
rep(j, 0, i) {
re . push_back(0);
}
} else {
std :: vector<int> nw = re;
if(re . size() < i - dw + lt . size()) {
re . resize(i - dw + lt . size());
}
if((re[i - dw - 1] += (ml = 1ll * (da[i] - rg + _mods) * qinv(dt) % _mods)) >= _mods) {
re[i - dw - 1] -= _mods;
}
rep(j, 1, lt . size()) {
re[i - dw + j - 1] = (1ll * (_mods - ml) * lt[j - 1] + re[i - dw + j - 1]) % _mods;
}
if(nw . size() < lt . size() - dw - 1) {
lt = nw, dw = i;
if((dt = da[i] - rg) < 0) {
dt += _mods;
}
}
}
}
return re;
}
void fcpy(int *fr, int *re, int cn) {
rep(i, 0, cn - 1) {
re[i] = fr[i];
}
}
int cpyy[_maxn], cpyz[_maxn];
void fmul(int *le, int *ri, int *re, int ln, int rn) {
rep(i, 0, ln + rn - 2) {
re[i] = 0;
}
rep(i, 0, ln - 1) {
rep(j, 0, rn - 1) {
re[i + j] = (1ll * le[i] * ri[j] + re[i + j]) % _mods;
}
}
}
void fmol(int *fr, int *mo, int cn, int mn) {
int rg = 0, nv = qinv(mo[mn - 1]);
dep(i, cn - 1, mn - 1) {
rg = 1ll * (_mods - nv) * fr[i] % _mods;
rep(j, 0, mn - 1) {
fr[i - mn + j + 1] = (1ll * rg * mo[j] + fr[i - mn + j + 1]) % _mods;
}
}
}
void fpol(int *da, int *re, long long up, int cn) {
re[0] = 1;
if(cn == 1) {
cpyy[0] = 1ll * (_mods - da[0]) * qinv(da[1]) % _mods;
} else {
cpyy[1] = 1;
}
while(up) {
if(up & 1) {
fcpy(re, cpyz, cn - 1), fmul(cpyy, cpyz, re, cn - 1, cn - 1), fmol(re, da, (cn << 1) - 3, cn);
}
fcpy(cpyy, cpyz, cn - 1), fmul(cpyz, cpyz, cpyy, cn - 1, cn - 1), fmol(cpyy, da, (cn << 1) - 3, cn);
up >>= 1;
}
}
const int _tabl[20] = {45, 4455, 407430, 36934785, 350210541, 427185456, 991901155, 110899952, 89411672, 401287887, 811189931, 286603985, 426843378, 418261776, 744223671, 302153364, 34240762, 689891595, 101012015, 748341487};
int main() {
n = 20, m = lred() - 1;
rep(i, 0, n - 1) {
p[i] = _tabl[i];
}
dans = fqbm(p, n);
rep(i, 1, dans . size()) {
if(dans[i - 1]) {
cans[dans . size() - i] = _mods - dans[i - 1];
}
}
cans[dans . size()] = 1, fpol(cans, fans, m, dans . size() + 1);
rep(i, 0, dans . size() - 1) {
rans = (1ll * p[i] * fans[i] + rans) % _mods;
}
uwit(rans), putchar('\n');
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 2756kb
input:
1
output:
45
result:
ok answer is '45'
Test #2:
score: 0
Accepted
time: 1ms
memory: 2784kb
input:
3
output:
407430
result:
ok answer is '407430'
Test #3:
score: 0
Accepted
time: 1ms
memory: 2732kb
input:
1000000000000000000
output:
493565653
result:
ok answer is '493565653'
Test #4:
score: 0
Accepted
time: 2ms
memory: 2808kb
input:
999999999999999254
output:
963821656
result:
ok answer is '963821656'
Test #5:
score: 0
Accepted
time: 2ms
memory: 2692kb
input:
2
output:
4455
result:
ok answer is '4455'
Test #6:
score: 0
Accepted
time: 2ms
memory: 2736kb
input:
999999999999999062
output:
256461144
result:
ok answer is '256461144'
Test #7:
score: 0
Accepted
time: 0ms
memory: 2756kb
input:
4
output:
36934785
result:
ok answer is '36934785'
Test #8:
score: 0
Accepted
time: 1ms
memory: 2760kb
input:
5
output:
350210541
result:
ok answer is '350210541'
Test #9:
score: 0
Accepted
time: 1ms
memory: 2764kb
input:
6
output:
427185456
result:
ok answer is '427185456'
Test #10:
score: 0
Accepted
time: 2ms
memory: 2732kb
input:
7
output:
991901155
result:
ok answer is '991901155'
Test #11:
score: 0
Accepted
time: 1ms
memory: 2696kb
input:
8
output:
110899952
result:
ok answer is '110899952'
Test #12:
score: 0
Accepted
time: 2ms
memory: 2808kb
input:
9
output:
89411672
result:
ok answer is '89411672'
Test #13:
score: 0
Accepted
time: 2ms
memory: 2704kb
input:
10
output:
401287887
result:
ok answer is '401287887'
Test #14:
score: 0
Accepted
time: 1ms
memory: 2820kb
input:
172
output:
376377812
result:
ok answer is '376377812'
Test #15:
score: 0
Accepted
time: 1ms
memory: 2756kb
input:
238
output:
81946973
result:
ok answer is '81946973'
Test #16:
score: 0
Accepted
time: 1ms
memory: 2760kb
input:
730
output:
661959857
result:
ok answer is '661959857'
Test #17:
score: 0
Accepted
time: 1ms
memory: 2888kb
input:
684
output:
828317367
result:
ok answer is '828317367'
Test #18:
score: 0
Accepted
time: 1ms
memory: 2764kb
input:
633
output:
673539741
result:
ok answer is '673539741'
Test #19:
score: 0
Accepted
time: 2ms
memory: 2752kb
input:
897
output:
159321465
result:
ok answer is '159321465'
Test #20:
score: 0
Accepted
time: 2ms
memory: 2780kb
input:
809
output:
521464595
result:
ok answer is '521464595'
Test #21:
score: 0
Accepted
time: 0ms
memory: 2900kb
input:
302
output:
92391482
result:
ok answer is '92391482'
Test #22:
score: 0
Accepted
time: 1ms
memory: 2764kb
input:
261
output:
854903269
result:
ok answer is '854903269'
Test #23:
score: 0
Accepted
time: 1ms
memory: 2696kb
input:
497
output:
594207939
result:
ok answer is '594207939'
Test #24:
score: 0
Accepted
time: 1ms
memory: 2700kb
input:
951
output:
927809758
result:
ok answer is '927809758'
Test #25:
score: 0
Accepted
time: 1ms
memory: 2808kb
input:
980
output:
65372821
result:
ok answer is '65372821'
Test #26:
score: 0
Accepted
time: 1ms
memory: 2760kb
input:
1000
output:
971150090
result:
ok answer is '971150090'
Test #27:
score: 0
Accepted
time: 0ms
memory: 2900kb
input:
969
output:
511011493
result:
ok answer is '511011493'
Test #28:
score: 0
Accepted
time: 2ms
memory: 2816kb
input:
998
output:
549357456
result:
ok answer is '549357456'
Test #29:
score: 0
Accepted
time: 1ms
memory: 2784kb
input:
98558
output:
245733611
result:
ok answer is '245733611'
Test #30:
score: 0
Accepted
time: 2ms
memory: 2716kb
input:
35873
output:
524107440
result:
ok answer is '524107440'
Test #31:
score: 0
Accepted
time: 2ms
memory: 2904kb
input:
3015
output:
928761172
result:
ok answer is '928761172'
Test #32:
score: 0
Accepted
time: 2ms
memory: 2692kb
input:
44398
output:
339084928
result:
ok answer is '339084928'
Test #33:
score: 0
Accepted
time: 2ms
memory: 2752kb
input:
82497
output:
273305194
result:
ok answer is '273305194'
Test #34:
score: 0
Accepted
time: 1ms
memory: 2704kb
input:
81678
output:
423439974
result:
ok answer is '423439974'
Test #35:
score: 0
Accepted
time: 0ms
memory: 2808kb
input:
95002
output:
868411966
result:
ok answer is '868411966'
Test #36:
score: 0
Accepted
time: 2ms
memory: 2696kb
input:
56392
output:
127537737
result:
ok answer is '127537737'
Test #37:
score: 0
Accepted
time: 2ms
memory: 2820kb
input:
49489
output:
841113901
result:
ok answer is '841113901'
Test #38:
score: 0
Accepted
time: 2ms
memory: 2820kb
input:
57109
output:
808819191
result:
ok answer is '808819191'
Test #39:
score: 0
Accepted
time: 2ms
memory: 2692kb
input:
99674
output:
890052301
result:
ok answer is '890052301'
Test #40:
score: 0
Accepted
time: 0ms
memory: 2764kb
input:
99513
output:
147223708
result:
ok answer is '147223708'
Test #41:
score: 0
Accepted
time: 2ms
memory: 2736kb
input:
99950
output:
638000302
result:
ok answer is '638000302'
Test #42:
score: 0
Accepted
time: 2ms
memory: 2768kb
input:
99939
output:
627100241
result:
ok answer is '627100241'
Test #43:
score: 0
Accepted
time: 2ms
memory: 2696kb
input:
99904
output:
768803875
result:
ok answer is '768803875'
Test #44:
score: 0
Accepted
time: 2ms
memory: 2788kb
input:
822981260158560519
output:
500129705
result:
ok answer is '500129705'
Test #45:
score: 0
Accepted
time: 1ms
memory: 2760kb
input:
28316250878314571
output:
954707612
result:
ok answer is '954707612'
Test #46:
score: 0
Accepted
time: 2ms
memory: 2764kb
input:
779547116602636424
output:
349022088
result:
ok answer is '349022088'
Test #47:
score: 0
Accepted
time: 1ms
memory: 2760kb
input:
578223540025879436
output:
310507001
result:
ok answer is '310507001'
Test #48:
score: 0
Accepted
time: 2ms
memory: 2808kb
input:
335408917862248766
output:
399860005
result:
ok answer is '399860005'
Test #49:
score: 0
Accepted
time: 2ms
memory: 2712kb
input:
74859962623990078
output:
905924996
result:
ok answer is '905924996'
Test #50:
score: 0
Accepted
time: 2ms
memory: 2756kb
input:
252509054434733439
output:
57677315
result:
ok answer is '57677315'
Test #51:
score: 0
Accepted
time: 2ms
memory: 2768kb
input:
760713016476890622
output:
840620988
result:
ok answer is '840620988'
Test #52:
score: 0
Accepted
time: 2ms
memory: 2760kb
input:
919845426262803496
output:
929606336
result:
ok answer is '929606336'
Test #53:
score: 0
Accepted
time: 2ms
memory: 2696kb
input:
585335723211847194
output:
975973040
result:
ok answer is '975973040'
Test #54:
score: 0
Accepted
time: 0ms
memory: 2692kb
input:
999999999999999478
output:
859690282
result:
ok answer is '859690282'
Test #55:
score: 0
Accepted
time: 2ms
memory: 2696kb
input:
999999999999999902
output:
879587490
result:
ok answer is '879587490'
Test #56:
score: 0
Accepted
time: 0ms
memory: 2824kb
input:
999999999999999168
output:
585232180
result:
ok answer is '585232180'