Submission #342081

# Submission time Handle Problem Language Result Execution time Memory
342081 2021-01-01T10:37:56 Z kekw Red-blue table (IZhO19_stones) C++17
11 / 100
171 ms 6960 KB
#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>

#define range(i, n) for (int i = 0; i < (n); ++i)
#define ar array
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()


typedef long long ll;
typedef long double ld;
using namespace std;

//using namespace __gnu_pbds;

const ll INF = 1e18 + 5;
const int INFi = 1e9;
const int maxN = 1e6 + 1500;
const int md2 = 998244353;
const int md = 1e9 + 7;

vector<vector<int>> sol1(int n, int m) {
    vector<vector<int>> res(n, vector<int> (m, 1));
    vector<int> cnt(n, (m - 1) / 2);
    set<pair<int, int>> can;
    range(i, n) if (cnt[i]) can.insert({cnt[i], i});
    for(int j = m - 1; j >= 0; --j) {
        int need = (n - 1) / 2 + 1;
        while(need && !can.empty()) {
            auto [a, b] = *can.rbegin();
            can.erase({a, b});
            cnt[b]--;
            res[b][j] = 0;
            a--;
            need--;
            if (a) can.insert({a, b});
        }
        if (need) break;
    }
    return res;
}

vector<vector<int>> sol2(int n, int m) {
    vector<vector<int>> res(n, vector<int> (m, 0));
    vector<int> cnt(m, (n - 1) / 2);
    set<pair<int, int>> can;
    range(i, m) if (cnt[i]) can.insert({cnt[i], i});
    for(int j = n - 1; j >= 0; --j) {
        int need = (m - 1) / 2 + 1;
        while(need && !can.empty()) {
            auto [a, b] = *can.rbegin();
            can.erase({a, b});
            cnt[b]--;
            res[j][b] = 1;
            a--;
            need--;
            if (a) can.insert({a, b});
        }
        if (need) break;
    }
    return res;
}

int cnt(vector<vector<int>> &res) {
    int ans = 0;
    range(i, res.size()) {
        int w = 0;
        range(j, res[i].size()) {
            if (res[i][j]) w++;
        }
        if (w > (int)res[i].size() - w) ans++;
    }
    range(j, res[0].size()) {
        int w = 0;
        range(i, res.size()) {
            if (res[i][j] == 0) w++;
        }
        if (w > (int)res.size() - w) ans++;
    }
    return ans;
}

void print(vector<vector<int>> &res) {
    cout << cnt(res) << '\n';
    range(i, (int)res.size()) {
        range(j, (int)res[i].size()) {
            if (res[i][j]) cout << "+";
            else cout << "-";
        }
        cout << '\n';
    }
}

void solve() {
    int n, m; cin >> n >> m;
    auto A = sol1(n, m);
    auto B = sol2(n, m);
    if (cnt(A) > cnt(B)) {
        print(A);
    } else {
        print(B);
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    // cout << setprecision(15) << fixed;
    int tests = 1;
    cin >> tests;
    range(_, tests) {
        solve();
    }
    return 0;
}

Compilation message

stones.cpp: In function 'int cnt(std::vector<std::vector<int> >&)':
stones.cpp:4:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define range(i, n) for (int i = 0; i < (n); ++i)
      |                                       ^
stones.cpp:66:5: note: in expansion of macro 'range'
   66 |     range(i, res.size()) {
      |     ^~~~~
stones.cpp:4:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define range(i, n) for (int i = 0; i < (n); ++i)
      |                                       ^
stones.cpp:68:9: note: in expansion of macro 'range'
   68 |         range(j, res[i].size()) {
      |         ^~~~~
stones.cpp:4:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define range(i, n) for (int i = 0; i < (n); ++i)
      |                                       ^
stones.cpp:73:5: note: in expansion of macro 'range'
   73 |     range(j, res[0].size()) {
      |     ^~~~~
stones.cpp:4:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    4 | #define range(i, n) for (int i = 0; i < (n); ++i)
      |                                       ^
stones.cpp:75:9: note: in expansion of macro 'range'
   75 |         range(i, res.size()) {
      |         ^~~~~
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 364 KB Wrong answer in test 4 4: 4 < 5
# Verdict Execution time Memory Grader output
1 Incorrect 3 ms 364 KB Wrong answer in test 4 3: 4 < 5
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 364 KB Wrong answer in test 4 4: 4 < 5
# Verdict Execution time Memory Grader output
1 Correct 160 ms 1500 KB Output is correct
2 Correct 171 ms 6508 KB Output is correct
3 Correct 159 ms 6960 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 159 ms 1644 KB Wrong answer in test 24 24: 24 < 44
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1 ms 364 KB Output is correct
2 Incorrect 1 ms 364 KB Wrong answer in test 4 4: 4 < 5