QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#575534 | #9132. Painting Fences | ucup-team3519 | TL | 1915ms | 11488kb | C++20 | 3.7kb | 2024-09-19 15:09:07 | 2024-09-19 15:09:07 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define V vector
#define all0(x) (x).begin(),(x).end()
#define all1(x) (x).begin()+1,(x).end()
#define pb push_back
#define fi first
#define se second
#define lb lower_bound
#define ub upper_bound
#define cin std::cin
#define cout std::cout
typedef long long LL;
typedef pair<int, int> pi;
typedef pair<LL, LL> pl;
//const int MN = 2e5 + 20;
const int INF = 2e9 + 1000;//INF
const LL INFLL = 8e18 + 1000;//INF long long
mt19937 mrand(chrono::steady_clock().now().time_since_epoch().count());
const int mod = 998244353;
//模板区域~~~~~~~
//模板结束~~~~~~~
void solve() {
int n, m; cin >> n >> m;
V<V<int>> a(n + 1, V<int>(m + 1));
for(int i = 1; i <= n; i++) {
string s; cin >> s;
for(int j = 1; j <= m; j++) a[i][j] = s[j - 1] - '0';
}
if(n > m) {
V<V<int>> b(m + 1, V<int>(n + 1));
for(int i = 1; i <= m; i++) {
for(int j = 1; j <= n; j++) {
b[i][j] = a[j][i];
}
}
swap(n, m);
swap(a, b);
}
V<V<int>> dp(n + 1, V<int>(n + 1, INF / 2));
dp[1][n] = 0;
auto cal_l = [&](int l, int r) -> int {
int ll = l - (r - l + 1);
ll = max(1, ll);
return ll;
};
auto cal_r = [&](int l, int r, int n) -> int {
int rr = r + (r - l + 1);
rr = min(rr, n);
return rr;
};
for(int len = n - 1; len >= 1; len--) {
// int mn = INF;
for(int l = 1; l <= n - len + 1; l++) {
int r = l + len - 1;
int ll = cal_l(l, r);
int rr = cal_r(l, r, n);
dp[l][r] = min(dp[l][r], dp[ll][r] + 1);
dp[l][r] = min(dp[l][r], dp[l][rr] + 1);
// mn = min(dp[l][r], mn);
}
// for(int l = 1; l <= n - len + 1; l++) {
// int r = l + len - 1;
// dp[l][r] = max(dp[l][r], mn + 1);
// }
}
V<array<int, 3>> useful;
for(int i = 1; i <= n; i++) {
int now = 30;
for(int j = i; j <= n; j++) {
if(dp[i][j] < now) now = dp[i][j], useful.pb({i, j, dp[i][j]});
// cout << i << " " << j << endl;
}
}
// cout << useful.size() << endl;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) a[i][j] += a[i - 1][j];
}
V<int> v(m + 1);
V<int> f(m + 1), n_f(m + 1);
int totans = INF;
for(auto [l, r, w] : useful) {
for(int i = 1; i <= m; i++) v[i] = a[r][i] - a[l - 1][i] == r - l + 1;//, cout << a[r][i] - a[l - 1][i] << " ";
bool ok = 0;
for(int l = 1; l <= m; l++) {
if(!v[l]) {
f[l] = 0;
continue;
}
int r = l;
while(r <= m && v[r] == 1) r++;
f[l] = r - 1;
ok = 1;
}
if(!ok) continue;
// cout << l << " " << r << endl;
// for(int i = 1; i <= m; i++) cout << v[i] << " ";
// cout << endl;
int ans = w;
while(1) {
if(f[1] == m) break;
for(auto &x : n_f) x = 0;
for(int i = 1; i <= m; i++) {
if(f[i] == 0) continue;
int ll = cal_l(i, f[i]);
int rr = cal_r(i, f[i], m);
n_f[ll] = max(n_f[ll], f[i]);
n_f[i] = max(n_f[i], rr);
}
ans++;
swap(n_f, f);
}
// cout << ans << endl;
totans = min(ans, totans);
}
cout << totans << endl;
}
int32_t main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int t=1;
// cin >> t;
while (t--)
solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 1ms
memory: 3720kb
input:
4 4 1001 0100 0110 0110
output:
3
result:
ok 1 number(s): "3"
Test #2:
score: 0
Accepted
time: 0ms
memory: 3648kb
input:
3 3 000 111 111
output:
1
result:
ok 1 number(s): "1"
Test #3:
score: 0
Accepted
time: 0ms
memory: 3648kb
input:
4 3 011 011 001 110
output:
2
result:
ok 1 number(s): "2"
Test #4:
score: 0
Accepted
time: 0ms
memory: 3652kb
input:
4 4 0011 1111 1111 1111
output:
1
result:
ok 1 number(s): "1"
Test #5:
score: 0
Accepted
time: 0ms
memory: 3580kb
input:
4 4 0000 0010 0100 1000
output:
4
result:
ok 1 number(s): "4"
Test #6:
score: 0
Accepted
time: 0ms
memory: 3640kb
input:
2 5 00010 00111
output:
2
result:
ok 1 number(s): "2"
Test #7:
score: 0
Accepted
time: 0ms
memory: 3848kb
input:
5 5 11111 11111 11111 01111 11111
output:
1
result:
ok 1 number(s): "1"
Test #8:
score: 0
Accepted
time: 0ms
memory: 3720kb
input:
5 5 00101 00000 00001 00000 00100
output:
6
result:
ok 1 number(s): "6"
Test #9:
score: 0
Accepted
time: 0ms
memory: 3704kb
input:
5 5 00000 00000 00001 10000 00000
output:
6
result:
ok 1 number(s): "6"
Test #10:
score: 0
Accepted
time: 0ms
memory: 3888kb
input:
10 10 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111 1111111111
output:
0
result:
ok 1 number(s): "0"
Test #11:
score: 0
Accepted
time: 0ms
memory: 3712kb
input:
10 10 0001000000 0000000000 0000000000 0000000001 0000000001 0000000001 0000000000 0000000000 0000000000 0000000001
output:
6
result:
ok 1 number(s): "6"
Test #12:
score: 0
Accepted
time: 0ms
memory: 3652kb
input:
10 10 1111111110 1111111110 1111111110 1111111110 1111111110 1111100110 1111100010 1111101110 1111101100 1111100000
output:
1
result:
ok 1 number(s): "1"
Test #13:
score: 0
Accepted
time: 0ms
memory: 3848kb
input:
10 10 0000000000 0000001000 0000000000 0000000000 0000000000 0100000000 0000000000 0000000100 0000000000 0000000000
output:
8
result:
ok 1 number(s): "8"
Test #14:
score: 0
Accepted
time: 0ms
memory: 3892kb
input:
30 31 0000000000000000000000000000000 0000000000000000000000000000000 1111111111111110000000000000011 1111111111111110000000000000011 1111111111111110000000000000011 1111111111111111111111111111111 1111111111111111111111111111111 1111111111111111111111111111100 1111111111111111111111111111100 111111...
output:
3
result:
ok 1 number(s): "3"
Test #15:
score: 0
Accepted
time: 0ms
memory: 3888kb
input:
30 31 0000000000000000000000000000000 0000000000000000000000000000000 0000000001000000000000000000000 0000000000000000000000100000000 0000000000000000000100000000000 0000000000000000001000000000000 0000000000000010000000000000000 0000000000000000000000000000000 0000000000000000000000000100110 000000...
output:
10
result:
ok 1 number(s): "10"
Test #16:
score: 0
Accepted
time: 0ms
memory: 3892kb
input:
30 31 0000000000000000000000000000000 0000000011111111111111000000000 0000000011111111111111000000000 1111111111111111111111000000000 1111111111111111111111000000000 1111111111111111111111000000000 1111111111111111111111000111100 1111111111111111111111000111100 1111111111111111111111000111100 111111...
output:
3
result:
ok 1 number(s): "3"
Test #17:
score: 0
Accepted
time: 0ms
memory: 3652kb
input:
30 31 0000001010000000000000000000000 0000000000000000000000000000000 0000000000000000001000000000000 0000010000000000000000000000000 0000000000000000000000000000000 0000000000000000000000000000000 0000001000010000000000000000000 0000100000010010000000000000000 0000000001000001000000010000000 000000...
output:
9
result:
ok 1 number(s): "9"
Test #18:
score: 0
Accepted
time: 1ms
memory: 3640kb
input:
50 50 01111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111...
output:
1
result:
ok 1 number(s): "1"
Test #19:
score: 0
Accepted
time: 0ms
memory: 3868kb
input:
50 50 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000...
output:
6
result:
ok 1 number(s): "6"
Test #20:
score: 0
Accepted
time: 0ms
memory: 3732kb
input:
50 50 00000000000000000000000000000000000000000000000000 00000000000000000000000001000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 000000000000000000000000000000000000000...
output:
11
result:
ok 1 number(s): "11"
Test #21:
score: 0
Accepted
time: 1ms
memory: 3908kb
input:
50 50 00000111111111111111111111111111111111111111111111 00001111111111111111111111111111111111111111111111 00001111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 11111111111111111111111111111111111111111111111111 111111111111111111111111111111111111111...
output:
1
result:
ok 1 number(s): "1"
Test #22:
score: 0
Accepted
time: 1ms
memory: 3836kb
input:
50 50 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000111111100 00000000000000000000000000000000000000000111111100 00111111111111111111111110000000000000000111111100 001111111111111111111111100000000000000...
output:
4
result:
ok 1 number(s): "4"
Test #23:
score: 0
Accepted
time: 0ms
memory: 3912kb
input:
50 50 00000000000000000000000000000000000100000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000001 00000000000000000000000000000000000000000000000000 000000000000000000000000000000000001000...
output:
11
result:
ok 1 number(s): "11"
Test #24:
score: 0
Accepted
time: 0ms
memory: 3644kb
input:
1 20 01111111111111111111
output:
1
result:
ok 1 number(s): "1"
Test #25:
score: 0
Accepted
time: 0ms
memory: 3804kb
input:
1 20 00111111111111111111
output:
1
result:
ok 1 number(s): "1"
Test #26:
score: 0
Accepted
time: 0ms
memory: 3884kb
input:
1 20 00111111111111111110
output:
2
result:
ok 1 number(s): "2"
Test #27:
score: 0
Accepted
time: 0ms
memory: 3544kb
input:
1 100 0000000000000000000000000000000000000001000000000100000000000000000100000000000000000000000000000000
output:
7
result:
ok 1 number(s): "7"
Test #28:
score: 0
Accepted
time: 0ms
memory: 3696kb
input:
1 500 000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #29:
score: 0
Accepted
time: 0ms
memory: 3592kb
input:
1 500 000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #30:
score: 0
Accepted
time: 0ms
memory: 3716kb
input:
1 500 000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #31:
score: 0
Accepted
time: 1ms
memory: 3612kb
input:
1 500 000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #32:
score: 0
Accepted
time: 0ms
memory: 3660kb
input:
1 500 000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #33:
score: 0
Accepted
time: 1ms
memory: 3616kb
input:
1 1000 00000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #34:
score: 0
Accepted
time: 0ms
memory: 3908kb
input:
1 1000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000000000000000000000...
output:
10
result:
ok 1 number(s): "10"
Test #35:
score: 0
Accepted
time: 1ms
memory: 3668kb
input:
1 1000 00000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
1
result:
ok 1 number(s): "1"
Test #36:
score: 0
Accepted
time: 0ms
memory: 3612kb
input:
1 1000 00000000000000000000000000000000000010000010000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000001000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
9
result:
ok 1 number(s): "9"
Test #37:
score: 0
Accepted
time: 1ms
memory: 3668kb
input:
1 1000 00000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #38:
score: 0
Accepted
time: 0ms
memory: 3668kb
input:
1 1000 00000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000...
output:
10
result:
ok 1 number(s): "10"
Test #39:
score: 0
Accepted
time: 1ms
memory: 3668kb
input:
1 1000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #40:
score: 0
Accepted
time: 0ms
memory: 3636kb
input:
1 1000 00000000000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000...
output:
9
result:
ok 1 number(s): "9"
Test #41:
score: 0
Accepted
time: 1ms
memory: 3740kb
input:
1 1000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
2
result:
ok 1 number(s): "2"
Test #42:
score: 0
Accepted
time: 0ms
memory: 3672kb
input:
1 1000 00000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000010000000000000000000101000000...
output:
10
result:
ok 1 number(s): "10"
Test #43:
score: 0
Accepted
time: 45ms
memory: 4460kb
input:
300 300 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
3
result:
ok 1 number(s): "3"
Test #44:
score: 0
Accepted
time: 49ms
memory: 4688kb
input:
300 300 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
3
result:
ok 1 number(s): "3"
Test #45:
score: 0
Accepted
time: 44ms
memory: 4392kb
input:
300 300 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000...
output:
3
result:
ok 1 number(s): "3"
Test #46:
score: 0
Accepted
time: 49ms
memory: 4644kb
input:
300 300 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
4
result:
ok 1 number(s): "4"
Test #47:
score: 0
Accepted
time: 198ms
memory: 5480kb
input:
500 500 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
3
result:
ok 1 number(s): "3"
Test #48:
score: 0
Accepted
time: 251ms
memory: 5480kb
input:
500 500 0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
1
result:
ok 1 number(s): "1"
Test #49:
score: 0
Accepted
time: 21ms
memory: 5476kb
input:
500 500 1010101100000101011010110001000111111000100101101110001110101000111000111110011100000001111110111000011111011000000101001011010101011100001110100100011101010011101110010011011001011000001101110011010011111000000011110001001101000001011001011011010100100110010000111110010100011000000011100000...
output:
14
result:
ok 1 number(s): "14"
Test #50:
score: 0
Accepted
time: 206ms
memory: 5608kb
input:
500 500 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
3
result:
ok 1 number(s): "3"
Test #51:
score: 0
Accepted
time: 247ms
memory: 5568kb
input:
500 500 0011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...
output:
1
result:
ok 1 number(s): "1"
Test #52:
score: 0
Accepted
time: 16ms
memory: 5564kb
input:
500 500 1101011110100110010100101010110101001101011111001000011111001100000100010000000110001010101001010100110001101101010001100111010011100000001011011000001100110101101011000101000001001111001011000100010110011010111010001011100111100101001010010110100110010011001011001100011010101111001010101000...
output:
14
result:
ok 1 number(s): "14"
Test #53:
score: 0
Accepted
time: 1915ms
memory: 11488kb
input:
1000 1000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...
output:
3
result:
ok 1 number(s): "3"
Test #54:
score: -100
Time Limit Exceeded
input:
1000 1000 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...