QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#89944 | #1283. Paper-cutting | wangzhe_0477 | AC ✓ | 85ms | 125712kb | C++23 | 5.6kb | 2023-03-21 20:27:34 | 2023-03-21 20:27:35 |
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 = 0; i <= std::max(n, m) + 1; i++) h1[i] = h2[i] = 0;
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');
}
Manacher(h1, n, l1, r1);
Manacher(h2, m, l2, r2);
int ans = 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++)
vis[i][j] = false;
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;
}
详细
Test #1:
score: 100
Accepted
time: 12ms
memory: 73820kb
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: 47ms
memory: 75080kb
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: 41ms
memory: 75108kb
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: 38ms
memory: 75028kb
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: 30ms
memory: 75492kb
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: 44ms
memory: 79932kb
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: 43ms
memory: 79856kb
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: 19ms
memory: 77116kb
input:
1 1000 1000 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...
output:
8
result:
ok "8"
Test #9:
score: 0
Accepted
time: 24ms
memory: 76976kb
input:
1 1000 1000 010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...
output:
41761
result:
ok "41761"
Test #10:
score: 0
Accepted
time: 28ms
memory: 95140kb
input:
1 1 1000000 011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110011010011001011010010110011010011001011001101001011010011001011001101001100101101001011001101001011010011001011010010110011010011001011001101001011010011001011010010110011010010110100110010110...
output:
2
result:
ok "2"
Test #11:
score: 0
Accepted
time: 38ms
memory: 95080kb
input:
1 1 1000000 010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010010100101001001010010100100101001001010010100100101001010...
output:
196419
result:
ok "196419"
Test #12:
score: 0
Accepted
time: 28ms
memory: 85380kb
input:
1 2 500000 0110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100110100110010110100101100110100110010110011010010110100110010110011010011001011010010110011010010110100110010110100101100110100110010110011010010110100110010110100101100110100101101001100101100...
output:
4
result:
ok "4"
Test #13:
score: 0
Accepted
time: 35ms
memory: 85376kb
input:
1 2 500000 0100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100100101001001010010100100101001001010010100100101001010010010100100101001010010010100100101001010010010100101001001010010010100101001001010010100...
output:
242787
result:
ok "242787"
Test #14:
score: 0
Accepted
time: 29ms
memory: 77088kb
input:
1 1000 1000 001110010110101011110111111111111001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011000011000010011001000011000011...
output:
1964
result:
ok "1964"
Test #15:
score: 0
Accepted
time: 31ms
memory: 76852kb
input:
1 1000 1000 110111101111100011000110100110100000111100101011101010010001000101110101000101011101101111011001011100001011001101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101101101101000000101101101101101101101101101101101101101...
output:
31620
result:
ok "31620"
Test #16:
score: 0
Accepted
time: 23ms
memory: 76848kb
input:
1 1000 1000 001101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110000000000000000110111101100000000000000001100110000000000000000111100000000000000001100110000000000000000111100000000000000001100110...
output:
15347
result:
ok "15347"
Test #17:
score: 0
Accepted
time: 21ms
memory: 76944kb
input:
1 1000 1000 100100111100100100111100100000010011110010010011110011111100111100100100111100100000010011110010010011110011001111001001001111001000000100111100100100111100111111001111001001001111001000000100111100100100111100100100110010010011110010010011110010000001001111001001001111001111110011110010...
output:
11049
result:
ok "11049"
Test #18:
score: 0
Accepted
time: 33ms
memory: 76900kb
input:
1 1000 1000 110011111111110011111111110011101101110011111111110011111111110011001100111111111100111111111100111011011100111111111100111111111100110111101100111111111100111111111100111011011100111111111100111111111100110011001111111111001111111111001110110111001111111111001111111111001111001111111111...
output:
29274
result:
ok "29274"
Test #19:
score: 0
Accepted
time: 29ms
memory: 85376kb
input:
1 2 500000 1110011110101110101010111000001111010001010011111011100010010101111111100011100100110000110100000011111011001100110111011100101000001001101001010001100000101101100110011100100010001100001000110001011100111101010100000101010010101100100111110010011100101011001011001000110110001100100110110...
output:
110436
result:
ok "110436"
Test #20:
score: 0
Accepted
time: 32ms
memory: 85372kb
input:
1 2 500000 0010101010101111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
74967
result:
ok "74967"
Test #21:
score: 0
Accepted
time: 16ms
memory: 77760kb
input:
1 10 100000 011001110011010111100111000010101101110101100001010100011000100111110100101101011011001000111101001100101100001111101011000111111011001010110101101110111011111011011110010101011010010111010000100001111100111111010100111110011011101001001010000101001100011011010011011100111100011001110011...
output:
4288
result:
ok "4288"
Test #22:
score: 0
Accepted
time: 19ms
memory: 79648kb
input:
1 5 200000 0000011000110110110101000110110111110001000011011110001111111100010101010010111111011010001111001011000111111011101111111110010101011000001111010110001000000010101001100001100100110110101100000010100011110100010001001110100011101100110010111110001111011001010101101110110110011001110111101...
output:
22390
result:
ok "22390"
Test #23:
score: 0
Accepted
time: 34ms
memory: 82080kb
input:
1 3 333333 0011101010011000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000000011110000111111000011110000110110110000111100001111110000111100000000111100001111110000111100000000111100001111110000111100000000111100001111110000111100001100110000111100001111110000...
output:
17650
result:
ok "17650"
Test #24:
score: 0
Accepted
time: 16ms
memory: 77452kb
input:
1 20000 50 01111000010000101101000010110110011011010000101101 10000111101111010010111101001001100100101111010010 10000111101111010010111101001001100100101111010010 10000111101111010010111101001001100100101111010010 01111000010000101101000010110110011011010000101101 1000011110111101001011110100100110...
output:
3184
result:
ok "3184"
Test #25:
score: 0
Accepted
time: 42ms
memory: 78124kb
input:
1 25000 40 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 1111010011001011110100110010111010100010 1111010011001011110100110010111010100010 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 0000101100110100001011001101000101011101 11...
output:
23804
result:
ok "23804"
Test #26:
score: 0
Accepted
time: 29ms
memory: 78140kb
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: 25ms
memory: 80012kb
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: 85ms
memory: 125712kb
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"