QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#89947 | #1283. Paper-cutting | wangzhe_0477 | AC ✓ | 82ms | 117912kb | C++23 | 5.5kb | 2023-03-21 20:28:55 | 2023-03-21 20:29:04 |
Judging History
answer
/*
Source:
39th Petrozavodsk Programming Camp
Day 4: Xi Lin Contest 6, Tuesday, August 25, 2020
Problem:
Paper-cutting
*/
#include <bits/stdc++.h>
using LL = long long;
using ULL = unsigned long long;
using LD = long double;
constexpr ULL E(LD x, int y) {
while (y--) x *= 10;
return x;
}
constexpr ULL SIZE(LD x, int y) {return E(x, y) + 5;}
const int inf32 = E(1, 9) + 5;
const LL inf64 = E(1, 18) + 5;
using ULL = unsigned long long;
namespace IO {
const int MAX_SIZE = 1 << 20;
class Reader {
private:
FILE *file;
char buff[MAX_SIZE], *p1, *p2;
int getchar() {
if (p1 == p2) p2 = (p1 = buff) + fread(buff, 1, MAX_SIZE, file);
return p1 == p2 ? EOF : *p1++;
}
public:
Reader(FILE *_file) {
file = _file;
p1 = p2 = buff;
}
Reader(const char* file_dir) {
file = std::fopen(file_dir, "r");
p1 = p2 = buff;
}
void Read() {}
template<typename... Args>
void Read(int &x, Args &...other) {
int f, ch;
x = f = 0;
ch = getchar();
for (; !isdigit(ch); ch = getchar()) f ^= ch == '-';
for (; isdigit(ch); ch = getchar()) x = x * 10 + (ch ^ 48);
if (f) x = -x;
Read(other...);
}
template<typename... Args>
void Read(long long &x, Args &...other) {
int f, ch;
x = f = 0;
ch = getchar();
for (; !isdigit(ch); ch = getchar()) f ^= ch == '-';
for (; isdigit(ch); ch = getchar()) x = x * 10 + (ch ^ 48);
if (f) x = -x;
Read(other...);
}
template<typename... Args>
void Read(__int128 &x, Args &...other) {
int f, ch;
x = f = 0;
ch = getchar();
for (; !isdigit(ch); ch = getchar()) f ^= ch == '-';
for (; isdigit(ch); ch = getchar()) x = x * 10 + (ch ^ 48);
if (f) x = -x;
Read(other...);
}
template<typename... Args>
void Read(double &x, Args &...other) {
int f, ch;
x = f = 0;
ch = getchar();
for (; !isdigit(ch); ch = getchar()) f ^= ch == '-';
for (; isdigit(ch); ch = getchar()) x = x * 10 + (ch ^ 48);
if (ch == '.') {
double e = 1;
for (ch = getchar(); isdigit(ch); ch = getchar())
x += (ch ^ 48) * (e *= .1);
}
if (f) x = -x;
Read(other...);
}
template<typename... Args>
void Read(char &ch, Args &...other) {
ch = getchar();
while (!isgraph(ch)) ch = getchar();
Read(other...);
}
template<typename... Args>
void Read(std::string &s, Args &...other) {
char ch;
s = "";
ch = getchar();
for (; !isgraph(ch);) ch = getchar();
for (; isgraph(ch); ch = getchar()) s += ch;
Read(other...);
}
template<typename... Args>
void Read(char* s, Args &...other) {
char ch;
ch = getchar();
while (!isgraph(ch)) ch = getchar();
for (; isgraph(ch); ch = getchar()) *s++ = ch;
*s = 0;
Read(other...);
}
};
}
IO::Reader reader(stdin);
int n, m, c[SIZE(1, 6)];
std::string s[SIZE(1, 6)];
std::vector<bool> vis[SIZE(1, 6)];
ULL h1[SIZE(1, 6)], h2[SIZE(1, 6)];
void Manacher(ULL h[SIZE(1, 6)], int len, int &l, int &r) {
int _r = 0, _mid = 0;
for (int i = 1; i <= len; i++) {
c[i] = i > _r ? 0 : std::min(_r - i, c[2 * _mid - i]);
while (i - c[i] > 0 && i + c[i] + 1 <= len && h[i - c[i]] == h[i + c[i] + 1]) c[i]++;
if (i + c[i] > _r) {
_r = i + c[i];
_mid = i;
}
}
l = 1;
for (int i = 1; i < len; i++)
if (i - c[i] < l)
l = i + 1;
r = len;
for (int i = len - 1; i >= l; i--)
if (i + c[i] >= r)
r = i;
}
int l1, r1, l2, r2;
const int dx[] = {0, 0, -1, 1}, dy[] = {-1, 1, 0, 0};
void Dfs(int x, int y) {
vis[x][y] = true;
for (int i = 0; i < 4; i++) {
int tx = x + dx[i], ty = y + dy[i];
if (tx < l1 || tx > r1) continue;
if (ty < l2 || ty > r2) continue;
if (s[tx - 1][ty - 1] != '0') continue;
if (vis[tx][ty]) continue;
Dfs(tx, ty);
}
}
int main() {
int data_count;
scanf("%d", &data_count);
for (int data = 1; data <= data_count; data++) {
reader.Read(n, m);
for (int i = 0; i < n; i++) reader.Read(s[i]);
for (int i = 1; i <= n; i++) h1[i] = 0;
for (int i = 1; i <= m; i++) h2[i] = 0;
for (int i = 1; i <= n; i++) vis[i].resize(m + 5);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
h1[i] = h1[i] * 2 + (s[i - 1][j - 1] == '0');
h2[j] = h2[j] * 2 + (s[i - 1][j - 1] == '0');
vis[i][j] = false;
}
Manacher(h1, n, l1, r1);
Manacher(h2, m, l2, r2);
int ans = 0;
for (int i = l1; i <= r1; i++)
for (int j = l2; j <= r2; j++)
if (s[i - 1][j - 1] == '0' && !vis[i][j])
Dfs(i, j), ans++;
printf("%d\n", ans);
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 12ms
memory: 73880kb
input:
3 2 5 11001 11001 5 7 1001100 0110011 0101101 0010010 1000000 3 2 11 11 11
output:
1 4 0
result:
ok 3 tokens
Test #2:
score: 0
Accepted
time: 46ms
memory: 74896kb
input:
100000 3 3 010 101 101 4 2 10 10 10 10 4 2 11 00 00 11 7 1 1 0 0 1 1 0 0 6 1 1 0 0 1 1 1 5 2 11 00 00 11 11 10 1 1 0 0 0 0 0 0 0 0 1 9 1 0 0 0 0 0 0 0 0 0 10 1 1 1 1 1 1 1 1 1 1 0 9 1 0 0 0 0 0 0 1 1 0 1 10 0010000100 7 1 0 0 0 0 0 0 0 4 2 00 00 00 00 7 1 0 1 0 0 0 0 1 10 1 1 0 0 0 0 0 0 0 0 1 9 1 1...
output:
3 1 1 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 2 2 1 1 1 0 1 0 2 1 1 1 1 2 1 0 2 2 2 1 2 1 2 2 1 0 1 1 1 2 1 1 1 1 1 1 2 0 1 1 1 1 1 1 1 1 0 3 2 1 3 1 1 3 1 1 1 2 1 1 1 1 1 3 1 1 2 0 1 1 1 2 2 1 1 1 1 2 2 1 2 2 3 2 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 2 2 2 1 1 5 1 1 1 2 1 1 2 2 2 2 2 1 1 1 2 2 2 1 1 2 2 1 3 1 1 2 1 ...
result:
ok 100000 tokens
Test #3:
score: 0
Accepted
time: 35ms
memory: 74904kb
input:
10000 65 1 1 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 1 0 81 1 0 0 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 0 0 0 1 0 0 0 0 1 0 1 0 1 0 1 0 1 1 0 1 1 1 0 0 ...
output:
17 17 2 4 4 11 2 3 5 4 4 9 8 5 5 6 2 7 5 8 1 3 1 12 3 1 3 9 4 9 1 4 1 5 4 3 9 2 3 4 3 5 7 7 9 10 10 3 4 1 3 13 7 11 11 14 20 4 6 3 5 3 11 5 9 2 4 9 8 10 8 5 6 5 11 7 2 4 3 6 3 4 9 2 7 4 9 5 4 5 1 2 11 2 2 2 15 3 12 3 6 3 3 11 7 4 12 4 17 4 5 5 1 8 25 3 10 4 5 9 1 3 5 2 4 3 13 4 4 8 7 9 9 1 9 3 1 2 8...
result:
ok 10000 tokens
Test #4:
score: 0
Accepted
time: 36ms
memory: 75188kb
input:
1000 977 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 0 1 1 0 1 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 0 1 0 0 0 1 0 0 1 1 1 0 1 0 0 0 1 1 1 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 1 1 0 0 0 1 0 0 1 0 0 1 1 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 1 1 1 0 1 0 0 0 1 0 0 1 1 0...
output:
102 167 21 25 74 28 12 62 62 42 22 88 14 77 147 11 47 89 18 48 40 6 44 235 22 130 118 31 19 60 117 42 10 2 99 36 87 9 143 37 73 67 25 12 37 28 13 54 31 90 47 108 12 107 27 18 6 20 3 29 52 89 49 17 30 13 12 41 52 49 19 117 33 10 63 32 65 35 19 16 19 28 64 67 68 34 103 46 31 67 22 41 117 27 113 112 42...
result:
ok 1000 tokens
Test #5:
score: 0
Accepted
time: 34ms
memory: 75380kb
input:
100 8148 1 1 1 1 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0...
output:
681 33 1156 568 237 528 311 229 1604 547 872 271 794 491 557 322 241 633 807 304 160 435 636 355 604 95 27 962 160 761 24 23 711 294 356 14 472 207 428 2371 539 1007 201 140 158 352 162 188 437 771 1286 1003 67 560 592 1002 408 238 71 74 359 1736 717 630 462 581 790 745 80 656 562 441 737 838 322 32...
result:
ok 100 tokens
Test #6:
score: 0
Accepted
time: 32ms
memory: 79052kb
input:
10 92831 1 0 1 0 0 0 1 0 0 1 0 1 1 0 1 0 0 1 0 1 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 0 0 1 0 1 0 0 0 0 0 0 1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 1 0 0 0 1 1 0 1 1 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 1 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1...
output:
5125 5258 4511 3428 198 5218 11694 9294 13007 1583
result:
ok 10 tokens
Test #7:
score: 0
Accepted
time: 35ms
memory: 79248kb
input:
10 53270 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 0 0 1 1 0 1 1 0 1 1 0 0 0 1 0 0 0 1 0 1 1 0 1 1 1 0 0 0 1 0 1 1 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 1 0 0 0 1 1 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 0 0 0 0 0 0 1 1 0 1 1 0 0 1 1 0 0 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0...
output:
6730 5017 389 2178 4679 5753 17391 4823 4599 1961
result:
ok 10 tokens
Test #8:
score: 0
Accepted
time: 26ms
memory: 76940kb
input:
1 1000 1000 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...
output:
8
result:
ok "8"
Test #9:
score: 0
Accepted
time: 29ms
memory: 76940kb
input:
1 1000 1000 010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...
output:
41761
result:
ok "41761"
Test #10:
score: 0
Accepted
time: 34ms
memory: 87196kb
input:
1 1 1000000 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...
output:
2
result:
ok "2"
Test #11:
score: 0
Accepted
time: 33ms
memory: 87164kb
input:
1 1 1000000 010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...
output:
196419
result:
ok "196419"
Test #12:
score: 0
Accepted
time: 33ms
memory: 81424kb
input:
1 2 500000 0110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100110100110010110100101100110100110010110011010010110100110010110011010011001011010010110011010010110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100...
output:
4
result:
ok "4"
Test #13:
score: 0
Accepted
time: 30ms
memory: 81424kb
input:
1 2 500000 0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100...
output:
242787
result:
ok "242787"
Test #14:
score: 0
Accepted
time: 27ms
memory: 76976kb
input:
1 1000 1000 001110010110101011110111111111111001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011...
output:
1964
result:
ok "1964"
Test #15:
score: 0
Accepted
time: 13ms
memory: 76944kb
input:
1 1000 1000 110111101111100011000110100110100000111100101011101010010001000101110101000101011101101111011001011100001011001101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101...
output:
31620
result:
ok "31620"
Test #16:
score: 0
Accepted
time: 20ms
memory: 77120kb
input:
1 1000 1000 001101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000110111101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110...
output:
15347
result:
ok "15347"
Test #17:
score: 0
Accepted
time: 15ms
memory: 77116kb
input:
1 1000 1000 100100111100100100111100100000010011110010010011110011111100111100100100111100100000010011110010010011110011001111001001001111001000000100111100100100111100111111001111001001001111001000000100111100100100111100100100110010010011110010010011110010000001001111001001001111001111110011110010...
output:
11049
result:
ok "11049"
Test #18:
score: 0
Accepted
time: 19ms
memory: 76904kb
input:
1 1000 1000 110011111111110011111111110011101101110011111111110011111111110011001100111111111100111111111100111011011100111111111100111111111100110111101100111111111100111111111100111011011100111111111100111111111100110011001111111111001111111111001110110111001111111111001111111111001111001111111111...
output:
29274
result:
ok "29274"
Test #19:
score: 0
Accepted
time: 30ms
memory: 81412kb
input:
1 2 500000 1110011110101110101010111000001111010001010011111011100010010101111111100011100100110000110100000011111011001100110111011100101000001001101001010001100000101101100110011100100010001100001000110001011100111101010100000101010010101100100111110010011100101011001011001000110110001100100110110...
output:
110436
result:
ok "110436"
Test #20:
score: 0
Accepted
time: 41ms
memory: 81444kb
input:
1 2 500000 0010101010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
74967
result:
ok "74967"
Test #21:
score: 0
Accepted
time: 29ms
memory: 77128kb
input:
1 10 100000 011001110011010111100111000010101101110101100001010100011000100111110100101101011011001000111101001100101100001111101011000111111011001010110101101110111011111011011110010101011010010111010000100001111100111111010100111110011011101001001010000101001100011011010011011100111100011001110011...
output:
4288
result:
ok "4288"
Test #22:
score: 0
Accepted
time: 31ms
memory: 77860kb
input:
1 5 200000 0000011000110110110101000110110111110001000011011110001111111100010101010010111111011010001111001011000111111011101111111110010101011000001111010110001000000010101001100001100100110110101100000010100011110100010001001110100011101100110010111110001111011001010101101110110110011001110111101...
output:
22390
result:
ok "22390"
Test #23:
score: 0
Accepted
time: 37ms
memory: 79628kb
input:
1 3 333333 0011101010011000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000110110110000111100001111110000111100000000111100001111110000111100000000111100001111110000111100000000111100001111110000111100001100110000111100001111110000...
output:
17650
result:
ok "17650"
Test #24:
score: 0
Accepted
time: 16ms
memory: 77284kb
input:
1 20000 50 01111000010000101101000010110110011011010000101101 10000111101111010010111101001001100100101111010010 10000111101111010010111101001001100100101111010010 10000111101111010010111101001001100100101111010010 01111000010000101101000010110110011011010000101101 1000011110111101001011110100100110...
output:
3184
result:
ok "3184"
Test #25:
score: 0
Accepted
time: 33ms
memory: 77936kb
input:
1 25000 40 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 1111010011001011110100110010111010100010 1111010011001011110100110010111010100010 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 11...
output:
23804
result:
ok "23804"
Test #26:
score: 0
Accepted
time: 27ms
memory: 78092kb
input:
1 33333 30 010000011110000001111000000100 010000011110000001111000000100 101111100001111110000111111011 010000011110000001111000000100 101111100001111110000111111011 101111100001111110000111111011 010000011110000001111000000100 101111100001111110000111111011 101111100001111110000111111011 1011111000...
output:
22032
result:
ok "22032"
Test #27:
score: 0
Accepted
time: 32ms
memory: 79232kb
input:
1 100000 10 0000000010 1111111101 1111111101 0000000010 0000000010 1111111101 0000000010 1111111101 1111111101 0000000010 0000000010 0000000010 1111111101 1111111101 0000000010 0000000010 1111111101 1111111101 0000000010 1111111101 1111111101 1111111101 0000000010 1111111101 1111111101 0000000010 11...
output:
29876
result:
ok "29876"
Test #28:
score: 0
Accepted
time: 82ms
memory: 117912kb
input:
1 1000000 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 0 0 1 1 0 0 1 ...
output:
30793
result:
ok "30793"