QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#830943#7714. Rikka with MirrorInsert_Username_HereAC ✓120ms24320kbC++201.6kb2024-12-25 05:39:152024-12-25 05:39:16

Judging History

This is the latest submission verdict.

  • [2024-12-25 05:39:16]
  • Judged
  • Verdict: AC
  • Time: 120ms
  • Memory: 24320kb
  • [2024-12-25 05:39:15]
  • Submitted

answer

#include <bits/stdc++.h>
#define f first
#define s second
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pii;
// const ll mod = 1e9 + 7;
// #include <brawlstars>
// FOR PAIN OR FOR GLORYYY ELLL PRIMOOOOOO

int dp[36][36][32][128];
void smax(int &a, int b) {
	a = max(a, b);
}

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int t;
	cin >> t;
	while(t--) {
		int n, m;
		cin >> n >> m;
		string grid[n];
		for(int i = 0; i < n; i++) cin >> grid[i];
		for(int i = 0; i <= n * m; i++) {
			for(int k = 0; k <= n * m; k++) {
				for(int m1 = 0; m1 < (1 << n); m1++) {
					for(int m2 = 0; m2 < (1 << m); m2++) dp[i][k][m1][m2] = -1;
				}
			}
		}
		dp[0][0][0][0] = 0;
		int idx, cur, b1, b2;
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < m; j++) {
				idx = i * m + j;
				for(int k = 0; k < n * m; k++) {
					for(int m1 = 0; m1 < (1 << n); m1++) {
						for(int m2 = 0; m2 < (1 << m); m2++) {
							if(dp[idx][k][m1][m2] < 0) continue;
							cur = dp[idx][k][m1][m2], b1 = ((m1 >> i) & 1), b2 = ((m2 >> j) & 1);
							smax(dp[idx + 1][k][m1][m2], cur + b1 + b2);
							if(grid[i][j] == '0') continue;
							if(b1 == b2) {
								smax(dp[idx + 1][k + 1][m1 | (1 << i)][m2 | (1 << j)], cur + b1 + 1);
								if(b1) smax(dp[idx + 1][k + 1][m1 ^ (1 << i)][m2 ^ (1 << j)], cur + 1);
							}
							if(b1 != b2) smax(dp[idx + 1][k + 1][m1 ^ (1 << i)][m2 ^ (1 << j)], cur + 1);
						}
					}
				}
			}
		}
		int ans = 0;
		for(int i = 0; i <= n * m; i++) {
			smax(ans, dp[n * m][i][0][0]);
			cout << 4 * n * m - 2 * ans << " ";
		}
		cout << "\n";
	}
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 12632kb

input:

2
3 3
101
011
101
4 4
1111
1111
1111
1111

output:

36 36 36 36 20 20 20 20 20 20 
64 64 64 64 40 40 40 40 32 32 32 32 24 24 24 24 24 

result:

ok 27 numbers

Test #2:

score: 0
Accepted
time: 120ms
memory: 24320kb

input:

100
1 1
1
1 2
11
1 3
111
1 4
1111
1 5
11111
1 6
111111
1 7
1111111
2 1
1
1
2 2
11
11
2 3
111
111
2 4
1111
1111
2 5
11111
11111
2 6
111111
111111
2 7
1111111
1111111
3 1
1
1
1
3 2
11
11
11
3 3
111
111
111
3 4
1111
1111
1111
3 5
11111
11111
11111
3 6
111111
111111
111111
3 7
1111111
1111111
1111111
4 ...

output:

4 4 
8 8 8 
12 12 12 12 
16 16 16 16 16 
20 20 20 20 20 20 
24 24 24 24 24 24 24 
28 28 28 28 28 28 28 28 
8 8 8 
16 16 16 16 8 
24 24 24 24 12 12 12 
32 32 32 32 16 16 16 16 16 
40 40 40 40 20 20 20 20 20 20 20 
48 48 48 48 24 24 24 24 24 24 24 24 24 
56 56 56 56 28 28 28 28 28 28 28 28 28 28 28 
1...

result:

ok 2411 numbers