답안 #241551

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
241551 2020-06-24T12:21:39 Z valerikk Red-blue table (IZhO19_stones) C++17
43 / 100
2000 ms 1376 KB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld; // typedef double ld;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef vector<ld> vd;
typedef vector<vd> vvd;
typedef complex<ld> cd;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<ld, ld> pdd;
typedef vector<char> vc;
typedef vector<vc> vvc;
typedef string str;
#define int ll

template<class A, class B>
inline bool mmin(A& a, B b) {
    if (b < a) {
        a = b;
        return 1;
    }
    return 0;
}

template<class A, class B>
inline bool mmax(A& a, B b) {
    if (b > a) {
        a = b;
        return 1;
    }
    return 0;
}

ld nxt_ld() {
    string s;
    cin >> s;
    return stold(s);
}

#define x first
#define y second
#define pb push_back
#define eb emplace_back
#define pf push_front
#define ef emplace_front
#define ppb pop_back
#define ppf pop_front
#define sz(a) (int)(a).size()
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()

signed main() {
    /*freopen("cbarn.in", "r", stdin);
    freopen("cbran.out", "w", stdout);*/
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin >> t;
    while (t--) {
        int n, m;
        cin >> n >> m;
        int mn = m / 2 + 1, q = n / 2 + 1;
        int ansr = n, ansc = 0;
        for (int i = 0; i <= n; i++) {
            int l = 0, r = m + 1;
            while (r - l > 1) {
                int md = (l + r) / 2;
                vector<int> cur(md, 0);
                int now = 0;
                for (int j = 0; j < i; j++) {
                    int zz = max(0LL, mn - m + md);
                    while (zz--) {
                        cur[now]++;
                        now++;
                        now %= md;
                    }
                }
                bool ok = 1;
                for (auto x : cur) {
                    if (n - x < q) {
                        ok = 0;
                        break;
                    }
                }
                /*if (md == 3 && i == 1) {
                    cout << "db: ";
                    for (auto x : cur) cout << x << " ";
                    cout << endl;
                }*/
                if (ok) l = md; else r = md;
            }
            if (i + l > ansr + ansc) {
                ansr = i;
                ansc = l;
            }
        }
        cout << ansr + ansc << '\n';
        vvc ans(n, vc(m, '-'));
        int now = 0;
        for (int i = 0; i < ansr; i++) {
            int zz = mn;
            for (int j = m - 1; zz > 0 && j >= ansc; j--) {
                ans[i][j] = '+';
                zz--;
            }
            while (zz--) {
                ans[i][now] = '+';
                now++;
                now %= ansc;
            }
        }
        for (auto x : ans) {
            for (auto y : x) cout << y;
            cout << '\n';
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 7 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 7 ms 384 KB Output is correct
4 Correct 12 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 473 ms 1376 KB Output is correct
2 Execution timed out 2074 ms 384 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 822 ms 1360 KB Output is correct
2 Execution timed out 2079 ms 504 KB Time limit exceeded
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Correct 4 ms 384 KB Output is correct
3 Correct 7 ms 384 KB Output is correct
4 Correct 12 ms 384 KB Output is correct
5 Correct 473 ms 1376 KB Output is correct
6 Execution timed out 2074 ms 384 KB Time limit exceeded
7 Halted 0 ms 0 KB -