QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#676888#7900. Gifts from KnowledgeWoufanWA 14ms3836kbC++143.8kb2024-10-26 02:20:082024-10-26 02:20:08

Judging History

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

  • [2024-10-26 02:20:08]
  • 评测
  • 测评结果:WA
  • 用时:14ms
  • 内存:3836kb
  • [2024-10-26 02:20:08]
  • 提交

answer

/*
    @file             G.cpp
    @author           1
    @date             2024-10-25 15:31
*/
#include <bits/stdc++.h>

using namespace std;
#define all(a) a.begin(), a.end()
#define pb push_back
#define eb emplace_back
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
#define endl '\n'
#define int long long

void print() { cout << '\n'; }

template<typename T, typename...Args>
void print(T t, Args...args) {
    cout << t << ' ';
    print(args...);
}

using pii = pair<int, int>;
using ll = long long;
using pll = pair<ll, ll>;
const int N = 2e5 + 10;
const int mod = 1000000000 + 7;
const ll MAX = 1e18;
// function

template<typename T>
void chmax(T &x, T y) { x = max(x, y); }

template<typename T>
void chmin(T &x, T y) { x = min(x, y); }

template<typename T = int>
vector<T> readVector(int n) {
    vector<T> a(n);
    for (T &x: a) cin >> x;
    return a;
}
/*
void solve() {

}*/

signed main() {
    IOS;
    int t = 1;
    cin >> t;
    for (int tt = 0; tt < t; ++tt) {
        int r, c;
        cin >> r >> c;
        vector<string> s(r);
        for (int i = 0; i < r; ++i)
            cin >> s[i];

        for (int j = 0; j < c; ++j) {
            bool b = true;
            for (int i = 0; i < r; ++i) {
                if (s[i][j] == '1') {
                    if (b)
                        b = false;
                    else {
                        for (int k = 0; k < c / 2; ++k) {
                            swap(s[i][k], s[i][c - k - 1]);
                        }
                        //reverse(all(s[i]));
                        break;
                    }
                }
            }
        }

        /*for (int i = 0; i < r; ++i)
            cout << s[i] << endl;*/
        int hv = -1;
        for (int j = 0; j < c; ++j) {
            bool b = true;
            if (hv == 0)
                break;
            for (int i = 0; i < r; ++i) {
                if (s[i][j] == '1') {
                    if (b)
                        b = false;
                    else {
                        hv = 0;
                        break;
                    }
                }
            }
        }

        /*if (tt == 11527 && hv == 0) {
            for (int i = 0; i < 4; ++i)
                cout << s[i] << '!';
        }*/

        if (hv == 0) {
            cout << 0 << endl;
            continue;
        }
        /*for (int i = 0; i < r; ++i)
            cout << s[i] << endl;*/

        int p[r + 1];
// p 寻找根节点,size 求数组包含的元素,仅根节点有效
        for (int i = 1; i <= r; ++i)
            p[i] = i; // 一开始各自在自己的集合

        function<int(int)> find = [&](int x) {
            if (p[x] != x)
                p[x] = find(p[x]);
            return p[x];
        };

        auto insert = [&](int x, int y) {
            if (find(x) != find(y))
                p[find(y)] = find(x);
        };

        for (int j = 0; j < c / 2; ++j) {
            vector<int> d;
            for (int i = 0; i < r; ++i) {
                if (s[i][j] == '1')
                    d.pb(i + 1);
                if (s[i][c - j - 1] == '1')
                    d.pb(i + 1);
            }
            for (int i = 1; i < d.size(); ++i)
                insert(d[i], d[i - 1]);
        }
        set<int> st;
        for (int i = 1; i <= r; ++i)
            st.insert(find(i));
        ll ans = 1;
        for (int i = 0; i < st.size(); ++i) {
            ans = (ans * 2) % mod;
            //cout << ans << ' ';
        }
        //cout << num << ' ';
        cout << ans << endl;

    }
    /*while (t--)
        solve();*/
    return 0;
}
/*
00000100000000
00001000100000
00000000000100
00000000000000
00000000000010
00100000000000
00001000000000
00000000000000
*/

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 12ms
memory: 3604kb

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
Wrong Answer
time: 14ms
memory: 3836kb

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:

wrong answer 11528th numbers differ - expected: '32', found: '0'