QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#301732 | #4922. 生活在对角线下 | zyc070419 | 50 | 138ms | 55344kb | C++14 | 10.0kb | 2024-01-10 09:02:10 | 2024-01-10 09:02:10 |
Judging History
answer
#include <bits/stdc++.h>
#define PII pair<int, int>
using namespace std;
const int N = 1e5 + 3;
const int W = (N * 3);
const int M = 3e5 + 3;
const int mod = 998244353;
const int pr = 3;
const int ig = 332748118;
const int inv2 = 499122177;
inline int read() {
char ch = getchar(); int x = 0, f = 1;
while (!isdigit(ch)) {if (ch == '-') {f = -1;} ch = getchar();}
while (isdigit(ch)) {x = (x << 3) + (x << 1) + ch - 48; ch = getchar();}
return x * f;
}
int fac[W], inv[W];
inline int add(int x, int y) {x += y; return x >= mod ? x - mod : x;}
inline int del(int x, int y) {x -= y; return x < 0 ? x + mod : x;}
inline void Add(int &x, int y) {x = add(x, y);}
inline void Del(int &x, int y) {x = del(x, y);}
inline int qpow(int x, int y) {
int res = 1;
while (y) {
if (y & 1) res = 1ll * res * x % mod;
x = 1ll * x * x % mod;
y >>= 1;
}
return res;
}
inline int C(int x, int y) {return (x < 0 || y < 0 || x < y) ? 0 : 1ll * fac[x] * inv[y] % mod * inv[x - y] % mod;}
struct Poly {
int len, INV;
vector<int> f, g;
void NTT(vector<int> &F) {
int x, y, pw, g;
for (int j = (len >> 1); j; j >>= 1) {
g = qpow(pr, (mod - 1) / (j << 1));
for (int i = 0; i < len; i += (j << 1)) {
pw = 1;
for (int k = 0; k < j; ++k, pw = 1ll * pw * g % mod) {
x = F[i + k]; y = F[i + j + k];
F[i + k] = add(x, y);
F[i + j + k] = 1ll * pw * del(x, y) % mod;
}
}
}
}
void INTT(vector<int> &F) {
int x, y, pw, g;
for (int j = 1; j < len; j <<= 1) {
g = qpow(ig, (mod - 1) / (j << 1));
for (int i = 0; i < len; i += (j << 1)) {
pw = 1;
for (int k = 0; k < j; ++k, pw = 1ll * pw * g % mod) {
x = F[i + k]; y = 1ll * pw * F[i + j + k] % mod;
F[i + k] = add(x, y);
F[i + j + k] = del(x, y);
}
}
}
for (int i = 0; i < len; ++i) F[i] = 1ll * F[i] * INV % mod;
}
void mul() {
NTT(f); NTT(g);
for (int i = 0; i < len; ++i) f[i] = 1ll * f[i] * g[i] % mod;
INTT(f);
}
void init(int n) {
len = 1;
while (len <= n + n) len <<= 1;
INV = qpow(len, mod - 2);
f.clear(); g.clear();
f.resize(len + 5); g.resize(len + 5);
}
}t;
int T, c, p, q, L, cnt, pos[10][10], pw[N][10];
PII id[10];
inline int calc(int x, int y, int k) {return 1ll * pw[x][id[k].first] * pw[y][id[k].second] % mod;}
namespace subtask1 {
const int N1 = 1005;
int f[N1][N1], g[N1][N1][10];
bool check() {return L <= 1000;}
void solve() {
f[0][0] = 1;
for (int i = 0; i < cnt; ++i) g[0][0][i] = calc(0, 0, i);
for (int i = 0; i <= L; ++i)
for (int j = 0; j <= L; ++j) {
if (i == 0 && j == 0) continue;
if (i) Add(f[i][j], f[i - 1][j]);
if (j) Add(f[i][j], f[i][j - 1]);
for (int k = 0; k < cnt; ++k) {
if (i) Add(g[i][j][k], g[i - 1][j][k]);
if (j) Add(g[i][j][k], g[i][j - 1][k]);
if (j <= i) Add(g[i][j][k], 1ll * f[i][j] * calc(i, j, k) % mod);
}
}
int n, m, ans;
while (T--) {
n = read(); m = read(); ans = 0;
for (int i = 0; i < cnt; ++i) Add(ans, 1ll * g[n][m][i] * read() % mod);
printf("%d\n", ans);
}
}
}
namespace subtask2 {
int f[N], g[N], n, m, v, ans;
bool check() {return T == 1 && p == 0 && q == 0;}
void solve() {
n = read(); m = read(); v = read();
if (n == m) {
g[n] = qpow(4, n);
f[n] = 1ll * del(1ll * (n + m + 1) * C(n + m, n) % mod, g[n]) * inv2 % mod;
printf("%lld\n", 1ll * add(f[n], g[n]) * v % mod);
}else if (n < m) {
g[0] = 1;
for (int i = 1; i <= n; ++i) g[i] = 4ll * g[i - 1] % mod;
for (int i = 0; i <= n; ++i) {
f[i] = 1ll * del(1ll * (i + i + 1) * C(i + i, i) % mod, g[i]) * inv2 % mod;
Add(ans, 1ll * add(f[i], g[i]) * del(C(n - i + m - i - 1, n - i), C(n - i + m - i - 1, n - i - 1)) % mod);
}
ans = 1ll * ans * v % mod;
printf("%d\n", ans);
}else {
g[0] = 1; ans = 1ll * (n + m + 1) * C(n + m, n) % mod;
for (int i = 1; i <= m; ++i) g[i] = 4ll * g[i - 1] % mod;
for (int i = 0; i <= m; ++i) {
f[i] = 1ll * del(1ll * (i + i + 1) * C(i + i, i) % mod, g[i]) * inv2 % mod;
Del(ans, 1ll * f[i] * del(C(n - i - 1 + m - i, m - i), C(n - i - 1 + m - i, n - i)) % mod);
}
ans = 1ll * ans * v % mod;
printf("%d\n", ans);
}
}
}
namespace subtask3 {
bool check() {return p == 0 && q == 0;}
void solve() {
t.init(L + 5);
if (c == 0) {
for (int i = 0, g = 1; i <= L; ++i, g = 4ll * g % mod)
t.f[i] = 1ll * add(1ll * (i + i + 1) * C(i + i, i) % mod, g) * inv2 % mod;
int n, m, v;
while (T--) {
n = read(); m = read(); v = read();
printf("%lld\n", 1ll * t.f[n] * v % mod);
}
}else if (c > 0) {
for (int i = 0, g = 1; i <= L; ++i, g = 4ll * g % mod)
t.f[i] = 1ll * add(1ll * (i + i + 1) * C(i + i, i) % mod, g) * inv2 % mod;
for (int i = 0; i <= L; ++i) t.g[i] = del(C(i + i + c - 1, i), C(i + i + c - 1, i - 1));
t.mul();
int n, m, v;
while (T--) {
n = read(); m = read(); v = read();
printf("%lld\n", 1ll * t.f[n] * v % mod);
}
}else {
c = -c;
for (int i = 0, g = 1; i <= L; ++i, g = 4ll * g % mod)
t.f[i] = 1ll * del(1ll * (i + i + 1) * C(i + i, i) % mod, g) * inv2 % mod;
for (int i = 0; i <= L; ++i) t.g[i] = del(C(i + i + c - 1, i), C(i + i + c - 1, i - 1));
t.mul();
int n, m, v;
while (T--) {
n = read(); m = read(); v = read();
printf("%lld\n", 1ll * del(1ll * (n + m + 1) * C(n + m, n) % mod, t.f[m]) * v % mod);
}
}
}
}
namespace subtask4 {
int ans, a[10], S[10][10], val[N << 1], pre[N << 1], f[N];
bool check() {return T == 1;}
int work(int n, int m, int k, int lim) {
if (n < 0 || m < 0) return 0;
for (int i = 0; i <= n + m; ++i) {
val[i] = 1;
for (int j = 1; j <= k; ++j) val[i] = 1ll * val[i] * (i + j) % mod;
if (i == 0) pre[i] = val[i];
else pre[i] = add(pre[i - 1], val[i]);
}
int res;
if (n == m) {
res = 1ll * pre[n + m] * C(n + m, n) % mod;
for (int i = 0; i <= n; ++i) Add(res, 1ll * C(i + i, i) * C(n - i + m - i, n - i) % mod * val[i + i] % mod);
res = 1ll * res * inv2 % mod;
}else if (n < m) {
t.init(n);
for (int i = 0; i <= n; ++i) {
t.f[i] = 1ll * C(i + i, i) * val[i + i] % mod;
t.g[i] = C(i + i, i);
}
t.mul(); res = 0;
for (int i = 0, tmp; i <= n; ++i) {
tmp = 1ll * add(1ll * pre[i + i] * C(i + i, i) % mod, t.f[i]) * inv2 % mod;
Add(res, 1ll * tmp * del(C(n - i + m - i - 1, n - i), C(n - i + m - i - 1, n - i - 1)) % mod);
}
}else {
t.init(m);
for (int i = 0; i <= m; ++i) {
t.f[i] = 1ll * C(i + i, i) * val[i + i] % mod;
t.g[i] = C(i + i, i);
}
t.mul(); res = 1ll * pre[n + m] * C(n + m, n) % mod;
for (int i = 0, tmp; i <= m; ++i) {
tmp = 1ll * del(1ll * pre[i + i] * C(i + i, i) % mod, t.f[i]) * inv2 % mod;
Del(res, 1ll * tmp * del(C(n - i - 1 + m - i, m - i), C(n - i - 1 + m - i, m - i - 1)) % mod);
}
}
for (int o = 0; o < lim; ++o)
for (int i = o; i <= n && i - o <= m; ++i)
Del(res, 1ll * C(i + i - o, i) * C(n - i + m - i + o, n - i) % mod * val[i + i - o]);
for (int o = lim; o < 0; ++o)
for (int i = 0; i <= n && i - o <= m; ++i)
Add(res, 1ll * C(i + i - o, i) * C(n - i + m - i + o, n - i) % mod * val[i + i - o]);
return res;
}
void solve() {
S[0][0] = 1;
for (int i = 1; i < 10; ++i)
for (int j = 1; j <= i; ++j)
S[i][j] = add(S[i - 1][j - 1], 1ll * S[i - 1][j] * j % mod);
int n, m;
n = read(); m = read();
for (int i = 0; i < cnt; ++i) a[i] = read();
for (int s = 0; s <= p && s <= n; ++s) {
for (int t = 0, res; t <= q && t <= m; ++t) {
res = 0;
for (int u = s; u <= p; ++u)
for (int v = t; v <= q; ++v)
Add(res, 1ll * a[pos[u][v]] * S[u][s] % mod * S[v][t] % mod);
Add(ans, 1ll * res * work(n - s, m - t, s + t, t - s));
}
}
printf("%d\n", ans);
}
}
int main() {
fac[0] = 1;
for (int i = 1; i <= M; ++i) fac[i] = 1ll * fac[i - 1] * i % mod;
inv[M] = qpow(fac[M], mod - 2);
for (int i = M; i >= 1; --i) inv[i - 1] = 1ll * inv[i] * i % mod;
T = read(); c = read(); p = read(); q = read(); L = read(); L = max(L, L + c);
for (int i = 0; i <= p; ++i)
for (int j = 0; j <= q; ++j)
id[pos[i][j] = cnt++] = make_pair(i, j);
for (int i = 0; i <= L; ++i) {
pw[i][0] = 1;
for (int j = 1; j <= max(p, q); ++j) pw[i][j] = 1ll * pw[i][j - 1] * i % mod;
}
if (subtask1 :: check()) subtask1 :: solve();
else if (subtask2 :: check()) subtask2 :: solve();
else if (subtask3 :: check()) subtask3 :: solve();
else if (subtask4 :: check()) subtask4 :: solve();
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 1
Accepted
Test #1:
score: 1
Accepted
time: 24ms
memory: 55148kb
input:
1 -10 1 2 1000 825 815 107973512 400177523 812303207 164088430 603506669 337780072
output:
360076089
result:
ok 1 number(s): "360076089"
Test #2:
score: 0
Accepted
time: 24ms
memory: 52328kb
input:
1 424 1 4 576 130 554 926445673 393820912 634481616 292175028 733650737 100427548 899689095 876811717 849191704 696040532
output:
564712546
result:
ok 1 number(s): "564712546"
Test #3:
score: 0
Accepted
time: 28ms
memory: 55344kb
input:
1 -171 2 1 1000 805 634 250066876 719653007 284194184 531322789 491311782 185842441
output:
910556244
result:
ok 1 number(s): "910556244"
Test #4:
score: 0
Accepted
time: 46ms
memory: 52584kb
input:
1 11 4 1 989 142 153 581558550 138798754 575233123 788754497 582314564 303591688 635874631 658261955 615116681 498307457
output:
918405181
result:
ok 1 number(s): "918405181"
Test #5:
score: 0
Accepted
time: 7ms
memory: 55208kb
input:
1 -87 1 2 1000 164 77 264180617 338145439 610918500 800846696 216126209 112962819
output:
629819261
result:
ok 1 number(s): "629819261"
Subtask #2:
score: 9
Accepted
Dependency #1:
100%
Accepted
Test #6:
score: 9
Accepted
time: 31ms
memory: 51752kb
input:
100000 -99 2 1 1000 712 613 238230707 820405654 473765646 826816733 751513618 421153458 209 110 22075351 398854663 148159396 487281124 972932017 200517786 383 284 22252771 205525630 491328752 607545155 561318911 135661425 929 830 156478040 89922795 380802607 32081978 898588032 110586958 956 857 4206...
output:
863094157 570366074 281608243 247495628 396961441 855444791 694374848 782506902 280202079 688077364 610676536 115373962 360154110 834242083 887647721 164293717 759683961 710870451 213441970 863772654 514218158 532711794 558875294 421795761 517787006 458381459 506983637 742686106 435175768 111255264 ...
result:
ok 100000 numbers
Test #7:
score: 0
Accepted
time: 54ms
memory: 51576kb
input:
100000 252 3 1 748 130 382 311369319 709099006 49474431 724072531 761415026 251406187 389170658 169808960 581 833 89779535 938252574 504798466 677842435 654289171 763708659 719082912 762770851 691 943 571693157 187035992 300995260 403041189 726726538 63983502 814000657 315732021 121 373 339102104 42...
output:
516270157 614211606 655396807 981733406 752565578 312973289 850750616 826813023 753739511 227580123 199177890 403714939 559334967 370464926 363937285 583678656 239132195 834163477 111915553 68813179 875627540 299872127 660063389 31474925 464946255 125818391 645016505 267670615 440441568 356463850 84...
result:
ok 100000 numbers
Test #8:
score: 0
Accepted
time: 51ms
memory: 53404kb
input:
100000 195 2 2 805 325 520 266481322 663615421 428019284 968378746 158386978 211891009 161987045 142931644 790431809 621 816 756898302 952132541 196745128 424307295 926376261 130425563 604844618 645296808 252920984 60 255 873310227 887037637 787608776 98214115 355810775 242821836 537250851 650821017...
output:
922269244 757786754 400099571 332972619 780501723 469958234 540206804 924583388 519189002 566620024 244468115 73221163 663221021 159111716 451144022 658783977 656844692 831466434 186871631 60740257 542611012 773315130 755261907 193772041 628947709 363111530 452621670 349808610 264947076 342250907 16...
result:
ok 100000 numbers
Subtask #3:
score: 20
Accepted
Test #9:
score: 20
Accepted
time: 6ms
memory: 14600kb
input:
1 4683 0 0 95317 86560 91243 412303217
output:
952052072
result:
ok 1 number(s): "952052072"
Test #10:
score: 0
Accepted
time: 9ms
memory: 13508kb
input:
1 -24796 0 0 100000 93338 68542 849332154
output:
980840409
result:
ok 1 number(s): "980840409"
Test #11:
score: 0
Accepted
time: 2ms
memory: 12208kb
input:
1 40156 0 0 59844 39551 79707 566086447
output:
620552907
result:
ok 1 number(s): "620552907"
Test #12:
score: 0
Accepted
time: 0ms
memory: 14740kb
input:
1 -714 0 0 100000 72672 71958 817542139
output:
799272798
result:
ok 1 number(s): "799272798"
Test #13:
score: 0
Accepted
time: 3ms
memory: 12428kb
input:
1 23418 0 0 76582 6862 30280 442920403
output:
642352133
result:
ok 1 number(s): "642352133"
Test #14:
score: 0
Accepted
time: 0ms
memory: 13572kb
input:
1 42983 0 0 57017 42753 85736 380012689
output:
828068267
result:
ok 1 number(s): "828068267"
Test #15:
score: 0
Accepted
time: 0ms
memory: 13772kb
input:
1 -25448 0 0 100000 47466 22018 617788426
output:
485886943
result:
ok 1 number(s): "485886943"
Test #16:
score: 0
Accepted
time: 5ms
memory: 14860kb
input:
1 -35138 0 0 100000 49912 14774 472000456
output:
323681794
result:
ok 1 number(s): "323681794"
Test #17:
score: 0
Accepted
time: 9ms
memory: 14160kb
input:
1 15928 0 0 84072 57657 73585 31014982
output:
184096139
result:
ok 1 number(s): "184096139"
Test #18:
score: 0
Accepted
time: 8ms
memory: 12572kb
input:
1 5316 0 0 94684 36186 41502 601085246
output:
51887433
result:
ok 1 number(s): "51887433"
Subtask #4:
score: 20
Accepted
Dependency #3:
100%
Accepted
Test #19:
score: 20
Accepted
time: 42ms
memory: 12108kb
input:
100000 43925 0 0 56075 36770 80695 880793638 55133 99058 946571985 27169 71094 601132030 42027 85952 954509221 1261 45186 326012305 12030 55955 997023025 9914 53839 788665071 39921 83846 193760311 25774 69699 584278712 28428 72353 45133606 32564 76489 40466335 35483 79408 491164633 1587 45512 842380...
output:
332757564 673855662 612475468 823636534 480158617 642667251 497333900 509207503 811150980 417148607 922658720 104640134 806209587 173065009 605751740 862381731 38248058 821044620 841331399 289617079 251770008 141909273 16627417 373489864 231237810 941325561 178798279 674579054 924181592 61271475 964...
result:
ok 100000 numbers
Test #20:
score: 0
Accepted
time: 53ms
memory: 12652kb
input:
100000 -24410 0 0 100000 88811 64401 883320435 98680 74270 679694811 25736 1326 585801443 58045 33635 248117495 75671 51261 370680099 54439 30029 971994977 59364 34954 824527105 83366 58956 743467199 86814 62404 560320056 79263 54853 982330282 31352 6942 755041686 56396 31986 625187969 95451 71041 6...
output:
944753157 183242929 363439527 347484131 162238407 874219996 466587038 69445583 299052607 25676433 596600163 562511304 969440848 734888105 717978251 646284734 285785033 177137639 757127623 981404389 646133036 419072122 570786562 49543639 324434058 643959988 425580060 576826099 385768604 231992533 414...
result:
ok 100000 numbers
Test #21:
score: 0
Accepted
time: 58ms
memory: 12076kb
input:
100000 -5861 0 0 100000 16952 11091 854232561 61287 55426 808396787 36941 31080 498670332 78084 72223 125065027 77939 72078 113005933 66811 60950 561023395 8690 2829 85984152 86780 80919 73284065 24701 18840 962634657 49186 43325 820164989 13544 7683 181059009 82733 76872 475302128 59169 53308 30753...
output:
953252694 312702564 226453117 67575786 903898714 513740725 876463803 777825703 146006471 2374918 297784488 386629852 320437877 988885626 718795318 32469771 761373569 413225682 535374528 890489090 946876926 547336815 741402601 164218598 624314043 440338456 358510966 78123388 844278570 353784116 33016...
result:
ok 100000 numbers
Test #22:
score: 0
Accepted
time: 48ms
memory: 12232kb
input:
100000 36351 0 0 63649 63623 99974 215842464 38932 75283 281762844 36628 72979 412528519 32243 68594 274539771 12583 48934 35262820 58794 95145 584821840 55654 92005 405023451 54594 90945 121054191 13799 50150 945750972 3396 39747 123637787 24436 60787 60557209 28533 64884 16469063 62629 98980 97582...
output:
174547901 368722952 48857280 38439764 222892265 312334973 776332784 870332855 155759525 948664848 557524993 498142735 312543625 96578298 812380665 262256294 625974911 11727861 934671647 410990281 662266734 602386252 129790362 105856770 514479617 606174145 351070683 902755038 185658666 319441312 6292...
result:
ok 100000 numbers
Test #23:
score: 0
Accepted
time: 51ms
memory: 12028kb
input:
100000 -30740 0 0 100000 68807 38067 675336699 46303 15563 123039099 67930 37190 232230088 54579 23839 35352609 92730 61990 284529851 67176 36436 665212494 57299 26559 133796107 49959 19219 33773652 84236 53496 372759887 99484 68744 426876149 34577 3837 572112278 61585 30845 172184077 77857 47117 90...
output:
36920501 226235095 750211143 333187562 373628984 295265220 37657937 466124753 990905489 551665113 446537030 431018050 86173594 169742883 218477019 236694053 535757873 691309698 571533347 44799594 978410954 207318736 924231440 714349634 256005837 765738237 355457430 213887617 753194413 829442039 4620...
result:
ok 100000 numbers
Test #24:
score: 0
Accepted
time: 48ms
memory: 12132kb
input:
100000 -38460 0 0 100000 51513 13053 225553548 46939 8479 742237301 76548 38088 403832837 58372 19912 532371282 69056 30596 227486715 57631 19171 992007340 43442 4982 456446541 98517 60057 139482341 93593 55133 617856070 94670 56210 632588368 61305 22845 540079128 42989 4529 243030634 61305 22845 60...
output:
264377260 988347451 122980170 868000378 424450627 937049667 82203152 65434176 511951571 866041634 172830523 592267120 339840284 510003002 301057898 661439490 614715916 352897087 347380257 99947743 217323734 533045349 197971764 276536330 181518107 810369320 38076519 795663640 628535813 745310656 9165...
result:
ok 100000 numbers
Test #25:
score: 0
Accepted
time: 52ms
memory: 13328kb
input:
100000 -21781 0 0 100000 98045 76264 260148888 51675 29894 775592370 96562 74781 6673060 61291 39510 561247689 51571 29790 374708153 56745 34964 902344534 38026 16245 499287321 46349 24568 80542300 44223 22442 235391104 44474 22693 180934225 73722 51941 571180203 98775 76994 186933783 37624 15843 66...
output:
403860096 918023019 505862766 325574001 758856670 454849577 390589711 142177895 563486806 252645563 120628328 553587845 992851487 933771813 401873497 993790093 184884214 294133840 346874311 513672329 312442149 595232497 772328343 814181956 380438506 927087216 253560503 970622427 910857175 430512071 ...
result:
ok 100000 numbers
Subtask #5:
score: 0
Wrong Answer
Dependency #1:
100%
Accepted
Dependency #3:
100%
Accepted
Test #26:
score: 0
Wrong Answer
time: 138ms
memory: 13624kb
input:
1 -40679 1 3 100000 75191 34512 321693501 896183087 224533692 282076683 38691763 630172019 273852722 127891101
output:
-1332467365
result:
wrong answer 1st numbers differ - expected: '198237763', found: '-1332467365'
Subtask #6:
score: 0
Wrong Answer
Test #41:
score: 0
Wrong Answer
time: 6ms
memory: 10684kb
input:
100000 0 2 1 100000 48964 48964 666670967 90494987 74847122 615108201 29533064 582540229 14418 14418 391779909 223696706 701170191 885097597 551643398 25626747 81584 81584 951326734 520293397 13860946 896899117 821166399 282263457 76849 76849 598606953 879771697 930252135 671750715 673503431 3060699...
output:
result:
wrong answer Answer contains longer sequence [length = 100000], but output contains 0 elements
Subtask #7:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
100%
Accepted
Dependency #3:
100%
Accepted
Dependency #4:
100%
Accepted
Dependency #5:
0%