QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#82594#2551. Math Stringwoxiangbaile#AC ✓2ms2904kbC++3.5kb2023-02-28 12:30:512023-02-28 12:30:55

Judging History

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

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-02-28 12:30:55]
  • 评测
  • 测评结果:AC
  • 用时:2ms
  • 内存:2904kb
  • [2023-02-28 12:30:51]
  • 提交

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'