QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#582824#7900. Gifts from KnowledgeccsurzwML 6ms3640kbC++231.5kb2024-09-22 17:33:302024-09-22 17:33:31

Judging History

你现在查看的是最新测评结果

  • [2024-09-22 17:33:31]
  • 评测
  • 测评结果:ML
  • 用时:6ms
  • 内存:3640kb
  • [2024-09-22 17:33:30]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl "\n"
const int mod = 1e9 + 7;
const int N = 1e6 + 5;
const int inf = 0x3f3f3f3f;


int n, m;
int fa[N];
int find(int x) {
	return fa[x] == x ? x : fa[x] = find(fa[x]);
}
ll ksm(ll x, ll y) {
	ll sum = 1;
	while (y) {
		if (y & 1)sum = x * sum % mod;
		x = x * x % mod;
		y >>= 1;
	}
	return sum;
}
void solve() {
	cin >> n >> m;
	for (int i = 1; i <= 2 * n; i++)fa[i] = i;
	vector<string> a(n + 1);
	for (int i = 1; i <= n; i++) {
		cin >> a[i];
		a[i] = ' ' + a[i];
	}
	for (int j = 1; j <= m ; j++) {
		vector<pair<int, int>> e;
		for (int i = 1; i <= n; i++) {
			if (a[i][j] == '1')e.push_back({ i , j });
			if (a[i][m + 1 - j] == '1')e.push_back({ i , m + 1 - j });
		}
		if (e.size() > 2) {
			cout << 0 << endl;
			return;
		}
		if (e.size() == 2 && e[0].first != e[1].first) {
			int u1 = find(e[1].first), v1 = find(e[0].first);
			int u2 = find(e[1].first + n), v2 = find(e[0].first + n);
			if (e[0].second == e[1].second) {
				fa[u1] = v2;
				fa[u2] = v1;
			}
			else {
				fa[u1] = v1;
				fa[u2] = v2;
			}
		}
	}
	ll cnt = 0;
	for (int i = 1; i <= n; i++) {
		int u = find(i), v = find(i + n);
		if (fa[i] == i)cnt++;
		if (fa[i + n] == i + n) cnt++;
		if (u == v) {
			cout << 0 << endl;
			return;
		}
	}
	cnt >>= 1;
	cout << ksm(2, cnt) << endl;
}

signed main() {
	std::ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T = 1;
	cin >> T;
	while (T--)
		solve();
	return 0;
}

詳細信息

Test #1:

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

input:

3
3 5
01100
10001
00010
2 1
1
1
2 3
001
001

output:

4
0
2

result:

ok 3 number(s): "4 0 2"

Test #2:

score: 0
Accepted
time: 6ms
memory: 3640kb

input:

15613
10 10
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
15 8
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
1 5
00000
5 9
000000000
000000000
0000...

output:

1024
32768
2
32
32768
128
32
16
16
2
16384
16384
128
128
32768
8192
128
64
16384
2
4
2
4096
16
4096
1024
32768
32768
16384
8
128
2
16
4096
8192
32768
8192
8192
16
16384
16384
256
128
8
256
8
4096
512
2
4
32
32
2
64
512
1024
32768
32768
2
64
16384
16
8192
16
256
16
64
8192
8192
64
1024
2
32768
2
4
51...

result:

ok 15613 numbers

Test #3:

score: -100
Memory Limit Exceeded

input:

15759
9 6
000000
000000
000000
000000
000000
000000
000000
000000
000000
5 15
010000000000000
000000000000000
000000000000000
000100000000000
000100000000000
14 12
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000000000
000000...

output:

512
16
16384
512
1024
4096
32768
4
2
512
512
512
512
8
2
256
16
4096
512
64
16
4096
512
32
32768
8192
32
2048
128
16
4096
64
32768
256
32
16384
8
512
32
2048
8
16
1024
2048
128
64
32
8
512
8
8192
256
8192
32768
2
8
512
512
256
32
2
2048
8192
8
64
8
2
16384
32768
32768
1024
4096
16384
16384
128
256
4...

result: