Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #include <ext/pb_ds/assoc_container.hpp>
- #include <ext/pb_ds/tree_policy.hpp>
- #include <ext/rope>
- #define ll long long
- #define ll128 __uint128_t
- #define ld long double
- #define vll vector <ll>
- #define vvll vector <vll>
- #define pll pair <ll, ll>
- #define rep(i, a, b) for(ll i = a; i < b; i++)
- #define per(i, a, b) for(ll i = a - 1; i >= b; --i)
- #define endl "\n"
- #define pb push_back
- #define pf push_front
- #define all(v) (v).begin(), (v).end()
- #define rall(v) (v).rbegin(), (v).rend()
- #define sorta(v) sort(all(v))
- #define sortd(v) sort(rall(v))
- #define vld vector<ld>
- #define debug if (1)
- #define log(val) debug {cout << "\n" << #val << ": " << val << "\n";}
- #define ios ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #define mod (ll)(1e9 + 7)
- using namespace std;
- using namespace __gnu_cxx;
- using namespace __gnu_pbds;
- ostream & operator << (ostream & out, vll & a) {
- for(auto i : a) out << i << " ";
- return out;
- }
- istream & operator >> (istream & in, vll & a) {
- for(auto &i : a) in >> i;
- return in;
- }
- ll usedj[200];
- ll usedk[200];
- int main() {
- //ios;
- ll n, m, h;
- cin >> n >> m >> h;
- vvll a(n, vll(m));
- vvll b(n, vll(h));
- vector<vvll> ansMin(n, vvll(m, vll(h, 0)));
- vector<vvll> ansMax(n, vvll(m, vll(h, 0)));
- rep(i, 0, n) {
- rep(j, 0, m) {
- char q;
- cin >> q;
- if(q == '1') a[i][j] = 1;
- else a[i][j] = 0;
- }
- }
- rep(i, 0, n) {
- rep(j, 0, h) {
- char q;
- cin >> q;
- if(q == '1') b[i][j] = 1;
- else b[i][j] = 0;
- }
- }
- ll cntMin = 0;
- ll cntMax = 0;
- rep(i, 0, n) {
- rep(j, 0, m) {
- rep(k, 0, h) {
- ansMax[i][j][k] = a[i][j] & b[i][k];
- }
- }
- }
- rep(i, 0, n) {
- fill(usedj, usedj + 200, 0);
- fill(usedk, usedk + 200, 0);
- rep(j, 0, m) {
- rep(k, 0, h) {
- if(a[i][j] && a[i][k]) {
- if(usedj[j] && usedk[k]) {
- continue;
- } else {
- ansMin[i][j][k] = a[i][j] & a[i][k];
- usedj[j] = 1;
- usedk[k] = 1;
- }
- }
- }
- }
- }
- rep(i, 0, n) {
- fill(usedj, usedj + 200, 0);
- fill(usedk, usedk + 200, 0);
- rep(j, 0, m) {
- rep(k, 0, h) {
- usedj[j] |= ansMax[i][j][k];
- usedk[k] |= ansMax[i][j][k];
- }
- }
- }
- vector<tuple<ll, ll, ll> > tuplesMax, tuplesMin;
- rep(i, 0, n) rep(j, 0, m) rep(k, 0, h) {
- cntMin += ansMin[i][j][k];
- cntMax += ansMax[i][j][k];
- if(ansMax[i][j][k]) {
- tuplesMax.pb(make_tuple(i, j, k));
- }
- if(ansMin[i][j][k]) {
- tuplesMin.pb(make_tuple(i, j, k));
- }
- }
- cout << cntMax << endl;
- for(auto i : tuplesMax) {
- cout << get<0>(i) << " " << get<1>(i) << " " << get<2>(i) << endl;
- }
- cout << cntMin << endl;
- for(auto i : tuplesMin) {
- cout << get<0>(i) << " " << get<1>(i) << " " << get<2>(i) << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement