QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#99794 | #4798. Floor Tiles in a Park | ckiseki# | AC ✓ | 51ms | 3524kb | C++20 | 4.4kb | 2023-04-23 19:08:19 | 2023-04-23 19:08:21 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#ifdef CKISEKI
#define safe cerr << __PRETTY_FUNCTION__ << " line " << __LINE__ << " safe\n"
#define orange(a...) orange_(#a, a)
#define debug(a...) debug_(#a, a)
template <typename i>
void orange_(const char * s, i l, i r) {
cerr << "\e[1;32m[ " << s << " ] = [ ";
for (int f = 0; l != r; l++)
cerr << (f++ ? " " : "") << *l;
cerr << " ]\e[0m\n";
}
template <typename ...T>
void debug_(const char * s, T ...a) {
cerr << "\e[1;32m(" << s << ") = (";
int cnt = sizeof...(T);
(..., (cerr << a << (--cnt ? ", " : ")\e[0m\n")));
}
#else
#define safe ((void)0)
#define debug(...) safe
#define orange(...) safe
#endif
int a[10][10];
int cnt[10];
void dfs(const int n, const int m, int i, int j, int k) {
while (i < n) {
while (j < m && a[i][j])
++j;
if (j == m) {
j = 0;
i++;
} else {
break;
}
}
if (i == n) {
cnt[k] += 1;
// debug(n, m, i, j);
// for (int t = 0; t < n; t++)
// orange(a[t], a[t]+m);
return;
}
if (k >= 5) {
return;
}
const auto clean = [&](int T, int S) {
for (int t = 0; t < T; t++) {
for (int s = 0; s < S; s++)
a[i + t][j + s] = 0;
}
};
for (int A = 1; i + A <= n; A++) {
for (int B = 1; j + B <= m; B++) {
bool ok = true;
for (int t = 0; t < A; t++)
if (a[i + t][j + B - 1])
ok = false;
if (!ok) {
clean(A, B - 1);
break;
}
for (int t = 0; t < A; t++)
a[i + t][j + B - 1] = k + 1;
dfs(n, m, i, j+B, k + 1);
if (j + B == m)
clean(A, B);
}
}
}
const int mod = 998244353;
int modpow(int e, int p) {
int r = 1;
while (p) {
if (p & 1) r = 1LL*r*e%mod;
e = 1LL*e*e%mod;
p >>= 1;
}
return r;
}
int modinv(int z) {
return modpow(z, mod - 2);
}
vector<int> mul(vector<int> a, vector<int> b) {
vector<int> c(a.size() + b.size() - 1);
for (size_t i = 0; i < a.size(); i++) {
for (size_t j = 0; j < b.size(); j++) {
c[i + j] = (c[i + j] + 1LL * a[i] * b[j]) % mod;
}
}
return c;
}
int modsub(int a, int b) {
return a - b < 0 ? a - b + mod : a - b;
}
int mul(int64_t a, int64_t b) {
return static_cast<int>(a * b % mod);
}
int modadd(int a, int b) {
return a + b >= mod ? a + b - mod : a + b;
}
int eval(vector<int> p, int x) {
int s = 0;
int prod = 1;
for (int j = 0; j < p.size(); j++) {
s = modadd(s, mul(prod , p[j]));
prod = mul(prod, x);
}
return s;
}
vector<int> interpolate(vector<pair<int,int>> pts) {
const int n = pts.size();
vector<int> res(n);
for (int i = 0; i < n; i++) {
vector<int> tmp{pts[i].second};
for (int j = 0; j < n; j++) {
if (j != i)
tmp[0] = mul(tmp[0],
modinv(
modsub(pts[i].first, pts[j].first)
));
}
for (int j = 0; j < n; j++) {
if (j != i)
tmp = mul(tmp, {mod-pts[j].first, 1});
}
for (int i = 0; i < n; i++) {
res[i] = modadd(res[i], tmp[i]);
}
}
debug(n);
for (int i = 0; i < n; i++) {
auto [x, y] = pts[i];
assert (eval(res, x) == y);
}
return res;
}
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
vector<int> poly[6][10];
for (int n = 1; n <= 6; n++) {
vector<pair<int,int>> pr[6];
for (int m = 1; m <= 6; m++) {
memset(cnt, 0, sizeof(cnt));
dfs(n, m, 0, 0, 0);
orange(cnt, cnt + 6);
for (int k = 1; k <= 5; k++) {
pr[k].emplace_back(m, cnt[k]);
}
}
for (int k = 1; k <= 5; k++) {
poly[k][n] = interpolate(pr[k]);
}
}
{
int N, M, k;
cin >> N >> M >> k;
vector<int> coef(6);
for (int j = 0; j < 6; j++) {
vector<pair<int,int>> tmp;
for (int n = 1; n <= 6; n++) {
tmp.emplace_back(n, poly[k][n][j]);
}
auto ret = interpolate(tmp);
coef[j] = eval(ret, N);
}
cout << eval(coef, M) << '\n';
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 33ms
memory: 3384kb
input:
2 3 5
output:
7
result:
ok 1 number(s): "7"
Test #2:
score: 0
Accepted
time: 28ms
memory: 3376kb
input:
4 3 5
output:
307
result:
ok 1 number(s): "307"
Test #3:
score: 0
Accepted
time: 33ms
memory: 3452kb
input:
6 372065168 5
output:
114514
result:
ok 1 number(s): "114514"
Test #4:
score: 0
Accepted
time: 29ms
memory: 3496kb
input:
6 7 3
output:
145
result:
ok 1 number(s): "145"
Test #5:
score: 0
Accepted
time: 30ms
memory: 3380kb
input:
4 8 2
output:
10
result:
ok 1 number(s): "10"
Test #6:
score: 0
Accepted
time: 32ms
memory: 3448kb
input:
7 5 4
output:
1104
result:
ok 1 number(s): "1104"
Test #7:
score: 0
Accepted
time: 30ms
memory: 3452kb
input:
8 6 1
output:
1
result:
ok 1 number(s): "1"
Test #8:
score: 0
Accepted
time: 33ms
memory: 3368kb
input:
8 2 5
output:
1092
result:
ok 1 number(s): "1092"
Test #9:
score: 0
Accepted
time: 32ms
memory: 3408kb
input:
2 7 4
output:
191
result:
ok 1 number(s): "191"
Test #10:
score: 0
Accepted
time: 34ms
memory: 3520kb
input:
6 6 4
output:
1145
result:
ok 1 number(s): "1145"
Test #11:
score: 0
Accepted
time: 32ms
memory: 3444kb
input:
1 5 5
output:
1
result:
ok 1 number(s): "1"
Test #12:
score: 0
Accepted
time: 28ms
memory: 3380kb
input:
5 1 5
output:
1
result:
ok 1 number(s): "1"
Test #13:
score: 0
Accepted
time: 33ms
memory: 3380kb
input:
1 4 4
output:
1
result:
ok 1 number(s): "1"
Test #14:
score: 0
Accepted
time: 32ms
memory: 3380kb
input:
2 2 4
output:
1
result:
ok 1 number(s): "1"
Test #15:
score: 0
Accepted
time: 32ms
memory: 3380kb
input:
4 1 4
output:
1
result:
ok 1 number(s): "1"
Test #16:
score: 0
Accepted
time: 29ms
memory: 3464kb
input:
1 3 3
output:
1
result:
ok 1 number(s): "1"
Test #17:
score: 0
Accepted
time: 33ms
memory: 3380kb
input:
2 2 3
output:
4
result:
ok 1 number(s): "4"
Test #18:
score: 0
Accepted
time: 32ms
memory: 3376kb
input:
3 1 3
output:
1
result:
ok 1 number(s): "1"
Test #19:
score: 0
Accepted
time: 32ms
memory: 3492kb
input:
1 2 2
output:
1
result:
ok 1 number(s): "1"
Test #20:
score: 0
Accepted
time: 33ms
memory: 3376kb
input:
2 1 2
output:
1
result:
ok 1 number(s): "1"
Test #21:
score: 0
Accepted
time: 33ms
memory: 3504kb
input:
2 2 2
output:
2
result:
ok 1 number(s): "2"
Test #22:
score: 0
Accepted
time: 33ms
memory: 3464kb
input:
1 1 1
output:
1
result:
ok 1 number(s): "1"
Test #23:
score: 0
Accepted
time: 29ms
memory: 3408kb
input:
1 2 1
output:
1
result:
ok 1 number(s): "1"
Test #24:
score: 0
Accepted
time: 46ms
memory: 3376kb
input:
2 1 1
output:
1
result:
ok 1 number(s): "1"
Test #25:
score: 0
Accepted
time: 29ms
memory: 3448kb
input:
1000000000 1000000000 5
output:
709563207
result:
ok 1 number(s): "709563207"
Test #26:
score: 0
Accepted
time: 33ms
memory: 3376kb
input:
1000000000 1000000000 4
output:
966434087
result:
ok 1 number(s): "966434087"
Test #27:
score: 0
Accepted
time: 32ms
memory: 3376kb
input:
1000000000 1000000000 3
output:
566309320
result:
ok 1 number(s): "566309320"
Test #28:
score: 0
Accepted
time: 29ms
memory: 3452kb
input:
1000000000 1000000000 2
output:
3511292
result:
ok 1 number(s): "3511292"
Test #29:
score: 0
Accepted
time: 29ms
memory: 3380kb
input:
1000000000 1000000000 1
output:
1
result:
ok 1 number(s): "1"
Test #30:
score: 0
Accepted
time: 32ms
memory: 3500kb
input:
1 1000000000 5
output:
206661581
result:
ok 1 number(s): "206661581"
Test #31:
score: 0
Accepted
time: 28ms
memory: 3484kb
input:
1000000000 1 5
output:
206661581
result:
ok 1 number(s): "206661581"
Test #32:
score: 0
Accepted
time: 32ms
memory: 3376kb
input:
1 1000000000 4
output:
243529510
result:
ok 1 number(s): "243529510"
Test #33:
score: 0
Accepted
time: 32ms
memory: 3500kb
input:
1000000000 1 4
output:
243529510
result:
ok 1 number(s): "243529510"
Test #34:
score: 0
Accepted
time: 32ms
memory: 3412kb
input:
1 1000000000 3
output:
854524156
result:
ok 1 number(s): "854524156"
Test #35:
score: 0
Accepted
time: 33ms
memory: 3464kb
input:
1000000000 1 3
output:
854524156
result:
ok 1 number(s): "854524156"
Test #36:
score: 0
Accepted
time: 32ms
memory: 3420kb
input:
1 1000000000 2
output:
1755646
result:
ok 1 number(s): "1755646"
Test #37:
score: 0
Accepted
time: 31ms
memory: 3396kb
input:
1000000000 1 2
output:
1755646
result:
ok 1 number(s): "1755646"
Test #38:
score: 0
Accepted
time: 32ms
memory: 3468kb
input:
1 1000000000 1
output:
1
result:
ok 1 number(s): "1"
Test #39:
score: 0
Accepted
time: 28ms
memory: 3512kb
input:
1000000000 1 1
output:
1
result:
ok 1 number(s): "1"
Test #40:
score: 0
Accepted
time: 28ms
memory: 3452kb
input:
998244353 998244353 5
output:
104
result:
ok 1 number(s): "104"
Test #41:
score: 0
Accepted
time: 32ms
memory: 3444kb
input:
998244353 998244353 2
output:
998244351
result:
ok 1 number(s): "998244351"
Test #42:
score: 0
Accepted
time: 29ms
memory: 3376kb
input:
998244353 998244353 3
output:
6
result:
ok 1 number(s): "6"
Test #43:
score: 0
Accepted
time: 33ms
memory: 3380kb
input:
998244353 998244353 4
output:
998244330
result:
ok 1 number(s): "998244330"
Test #44:
score: 0
Accepted
time: 32ms
memory: 3444kb
input:
998244353 998244353 1
output:
1
result:
ok 1 number(s): "1"
Test #45:
score: 0
Accepted
time: 29ms
memory: 3464kb
input:
167959139 481199252 5
output:
636943179
result:
ok 1 number(s): "636943179"
Test #46:
score: 0
Accepted
time: 33ms
memory: 3468kb
input:
641009859 54748096 4
output:
21254172
result:
ok 1 number(s): "21254172"
Test #47:
score: 0
Accepted
time: 32ms
memory: 3444kb
input:
524125987 923264237 5
output:
806978440
result:
ok 1 number(s): "806978440"
Test #48:
score: 0
Accepted
time: 33ms
memory: 3372kb
input:
702209411 496813081 4
output:
567318593
result:
ok 1 number(s): "567318593"
Test #49:
score: 0
Accepted
time: 32ms
memory: 3520kb
input:
585325539 365329221 5
output:
135702788
result:
ok 1 number(s): "135702788"
Test #50:
score: 0
Accepted
time: 33ms
memory: 3444kb
input:
58376259 643910770 4
output:
906285669
result:
ok 1 number(s): "906285669"
Test #51:
score: 0
Accepted
time: 29ms
memory: 3376kb
input:
941492387 72235422 3
output:
984446484
result:
ok 1 number(s): "984446484"
Test #52:
score: 0
Accepted
time: 29ms
memory: 3420kb
input:
824608515 940751563 4
output:
714960410
result:
ok 1 number(s): "714960410"
Test #53:
score: 0
Accepted
time: 32ms
memory: 3372kb
input:
2691939 514300407 2
output:
516992344
result:
ok 1 number(s): "516992344"
Test #54:
score: 0
Accepted
time: 32ms
memory: 3412kb
input:
802030518 598196518 2
output:
401982681
result:
ok 1 number(s): "401982681"
Test #55:
score: 0
Accepted
time: 29ms
memory: 3520kb
input:
685146646 26521171 5
output:
359577836
result:
ok 1 number(s): "359577836"
Test #56:
score: 0
Accepted
time: 32ms
memory: 3444kb
input:
863230070 895037311 4
output:
615300281
result:
ok 1 number(s): "615300281"
Test #57:
score: 0
Accepted
time: 32ms
memory: 3504kb
input:
41313494 468586155 5
output:
965938269
result:
ok 1 number(s): "965938269"
Test #58:
score: 0
Accepted
time: 32ms
memory: 3452kb
input:
219396918 747167704 4
output:
53928649
result:
ok 1 number(s): "53928649"
Test #59:
score: 0
Accepted
time: 33ms
memory: 3508kb
input:
102513046 615683844 5
output:
875740368
result:
ok 1 number(s): "875740368"
Test #60:
score: 0
Accepted
time: 29ms
memory: 3456kb
input:
985629174 189232688 4
output:
219741272
result:
ok 1 number(s): "219741272"
Test #61:
score: 0
Accepted
time: 33ms
memory: 3444kb
input:
458679894 912524637 5
output:
941073341
result:
ok 1 number(s): "941073341"
Test #62:
score: 0
Accepted
time: 29ms
memory: 3452kb
input:
341796022 486073481 5
output:
845467585
result:
ok 1 number(s): "845467585"
Test #63:
score: 0
Accepted
time: 51ms
memory: 3416kb
input:
519879446 764655030 4
output:
706045468
result:
ok 1 number(s): "706045468"
Test #64:
score: 0
Accepted
time: 33ms
memory: 3476kb
input:
452405440 586588704 5
output:
335640429
result:
ok 1 number(s): "335640429"
Test #65:
score: 0
Accepted
time: 33ms
memory: 3340kb
input:
335521569 160137548 4
output:
951724102
result:
ok 1 number(s): "951724102"
Test #66:
score: 0
Accepted
time: 25ms
memory: 3356kb
input:
808572289 733686393 4
output:
619610341
result:
ok 1 number(s): "619610341"
Test #67:
score: 0
Accepted
time: 32ms
memory: 3372kb
input:
691688417 162011045 5
output:
616539456
result:
ok 1 number(s): "616539456"
Test #68:
score: 0
Accepted
time: 33ms
memory: 3452kb
input:
869771841 30527185 5
output:
763472087
result:
ok 1 number(s): "763472087"
Test #69:
score: 0
Accepted
time: 33ms
memory: 3500kb
input:
752887969 604076030 4
output:
483504483
result:
ok 1 number(s): "483504483"
Test #70:
score: 0
Accepted
time: 32ms
memory: 3500kb
input:
930971393 177624874 4
output:
921062862
result:
ok 1 number(s): "921062862"
Test #71:
score: 0
Accepted
time: 32ms
memory: 3408kb
input:
109054817 751173719 5
output:
84946027
result:
ok 1 number(s): "84946027"
Test #72:
score: 0
Accepted
time: 32ms
memory: 3444kb
input:
992170945 324722563 3
output:
386957789
result:
ok 1 number(s): "386957789"
Test #73:
score: 0
Accepted
time: 29ms
memory: 3376kb
input:
170254369 48014511 4
output:
848817111
result:
ok 1 number(s): "848817111"
Test #74:
score: 0
Accepted
time: 33ms
memory: 3376kb
input:
248004555 280013594 3
output:
784895115
result:
ok 1 number(s): "784895115"
Test #75:
score: 0
Accepted
time: 29ms
memory: 3500kb
input:
131120683 148529734 5
output:
652027866
result:
ok 1 number(s): "652027866"
Test #76:
score: 0
Accepted
time: 28ms
memory: 3516kb
input:
604171403 722078578 5
output:
912747535
result:
ok 1 number(s): "912747535"
Test #77:
score: 0
Accepted
time: 29ms
memory: 3420kb
input:
487287531 295627423 5
output:
642940101
result:
ok 1 number(s): "642940101"
Test #78:
score: 0
Accepted
time: 32ms
memory: 3504kb
input:
665370955 18919371 3
output:
799728148
result:
ok 1 number(s): "799728148"
Test #79:
score: 0
Accepted
time: 32ms
memory: 3412kb
input:
843454379 297500920 4
output:
732179859
result:
ok 1 number(s): "732179859"
Test #80:
score: 0
Accepted
time: 28ms
memory: 3464kb
input:
21537803 166017060 4
output:
546398482
result:
ok 1 number(s): "546398482"
Test #81:
score: 0
Accepted
time: 32ms
memory: 3524kb
input:
904653932 739565904 5
output:
24413120
result:
ok 1 number(s): "24413120"
Test #82:
score: 0
Accepted
time: 32ms
memory: 3380kb
input:
787770060 313114749 5
output:
299104715
result:
ok 1 number(s): "299104715"
Test #83:
score: 0
Accepted
time: 32ms
memory: 3376kb
input:
260820780 181630889 5
output:
929524647
result:
ok 1 number(s): "929524647"
Test #84:
score: 0
Accepted
time: 33ms
memory: 3512kb
input:
43603670 268405779 5
output:
811242775
result:
ok 1 number(s): "811242775"
Test #85:
score: 0
Accepted
time: 32ms
memory: 3464kb
input:
221687094 136921920 5
output:
381700361
result:
ok 1 number(s): "381700361"
Test #86:
score: 0
Accepted
time: 32ms
memory: 3420kb
input:
399770518 710470764 5
output:
13710244
result:
ok 1 number(s): "13710244"
Test #87:
score: 0
Accepted
time: 32ms
memory: 3380kb
input:
282886646 284019609 5
output:
186074064
result:
ok 1 number(s): "186074064"
Test #88:
score: 0
Accepted
time: 31ms
memory: 3364kb
input:
460970070 857568453 5
output:
871930088
result:
ok 1 number(s): "871930088"
Test #89:
score: 0
Accepted
time: 32ms
memory: 3416kb
input:
639053494 285893105 5
output:
381113127
result:
ok 1 number(s): "381113127"
Test #90:
score: 0
Accepted
time: 32ms
memory: 3384kb
input:
817136918 154409246 5
output:
904298071
result:
ok 1 number(s): "904298071"
Test #91:
score: 0
Accepted
time: 33ms
memory: 3376kb
input:
700253046 727958090 5
output:
722840722
result:
ok 1 number(s): "722840722"
Test #92:
score: 0
Accepted
time: 33ms
memory: 3440kb
input:
583369174 301506934 5
output:
4601844
result:
ok 1 number(s): "4601844"
Test #93:
score: 0
Accepted
time: 33ms
memory: 3440kb
input:
56419894 875055779 5
output:
396259549
result:
ok 1 number(s): "396259549"
Test #94:
score: 0
Accepted
time: 32ms
memory: 3496kb
input:
134170081 256797965 5
output:
976322422
result:
ok 1 number(s): "976322422"
Test #95:
score: 0
Accepted
time: 29ms
memory: 3412kb
input:
998244354 998244354 2
output:
0
result:
ok 1 number(s): "0"
Test #96:
score: 0
Accepted
time: 33ms
memory: 3380kb
input:
5 5 5
output:
3474
result:
ok 1 number(s): "3474"