QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#815444#9884. Grid Constructionucup-team5234#WA 1ms3548kbC++235.3kb2024-12-15 14:27:372024-12-15 14:27:37

Judging History

This is the latest submission verdict.

  • [2024-12-15 14:27:37]
  • Judged
  • Verdict: WA
  • Time: 1ms
  • Memory: 3548kb
  • [2024-12-15 14:27:37]
  • Submitted

answer

#include "bits/stdc++.h"

using namespace std;
#define rep(i, n) for(int i = 0; i < n; i ++)

vector<string> solve9(int w) {
    vector<string> s(9, string(w, '.'));
    vector<string> t(9, string(9, '.'));
    vector<string> re(9, string(6, '.'));

    s[0] = "<<<<<<<<^";
    s[1] = "v.v.v.v.^";
    s[2] = "v>.^.^.<^";
    s[3] = "v.<^>>>.^";
    s[4] = "v>.^.v.<^";
    s[5] = "v.<<<v>.^";
    s[6] = "v>.v.v.<^";
    s[7] = "v.^.^.^.^";
    s[8] = "v>>>>>>>>";

    re[0] = "<<<<<<";
    re[1] = "v.v.v.";
    re[2] = ".<v>.^";
    re[3] = ">.v.<^";
    re[4] = ".^.^.^";
    re[5] = ">>>>>>";
    re[6] = ".v.v.v";
    re[7] = "^.^.^.";
    re[8] = ">>>>>>";

    while((int)s[0].size() < w){
        int a = s[0].size()-2;
        rep(i, 9) s[i] = s[i].substr(0, a) + re[i] + s[i].substr(a);
    }


    return s;
}
vector<string> solve11(int w) {
    vector<string> s(11, string(w, '.'));
    vector<string> re(11, string(6, '.'));
    s[0] = "<<<<<<<<<<^";
    s[1] = "v.v.v.v.v.^";
    s[2] = "v>.^.<v>.<^";
    s[3] = "v.<^>.v.^.^";
    s[4] = "v>.^.^.<<<^";
    s[5] = "v.<^>>>.v.^";
    s[6] = "v>.^.v.^.<^";
    s[7] = "v.<<<v>>>.^";
    s[8] = "v>.v.v.v.<^";
    s[9] = "v.^.^.^.^.^";
    s[10]= "v>>>>>>>>>>";

    re[0] = "<<<<<<";
    re[1] = "v.v.v.";
    re[2] = "<v>.^.";
    re[3] = ".v.<^>";
    re[4] = "<v>.^.";
    re[5] = ".v.<^>";
    re[6] = "^.^.^.";
    re[7] = ">>>>>>";
    re[8] = "v.v.v.";
    re[9] = ".^.^.^";
    re[10]= ">>>>>>";


    while((int)s[0].size() < w){
        int a = s[0].size()-2;
        rep(i, 11) s[i] = s[i].substr(0, a) + re[i] + s[i].substr(a);
    }
    return s;
}

void solve() {
    int h, w;
    cin >> h >> w;
    if(h % 6 != w % 6) {
        cout << "No" << endl;
    } else if(h % 3 == 1) {
        cout << "No" << endl;
    } else if(h == 2) {
        cout << "Yes" << endl;
        cout << "<^" << endl;
        cout << "v>" << endl;
    } else if(h % 6 == 5 or h % 6 == 3) {
        int base = 0;
        vector<string> ans(h, string(w, '.'));
        while(min(h, w) >= 12 or (h == w and h >= 6)) {
            rep(i, w - 1) {
                ans[base][base + i] = '<';
                ans[h - 1 + base][w - 1 + base - i] = '>';
            }
            rep(i, h - 1) {
                ans[base + i][w - 1 + base] = '^'; 
                ans[h - 1 + base - i][base] = 'v';
            }
            for(int ii = 2; ii < w - 2; ii += 2) {
                int i = base + ii;
                ans[base + 1][i] = 'v';
                ans[h + base - 2][i] = '^';
            }
            for(int ii = 2; ii < h - 2; ii += 2) {
                int i = base + ii;
                ans[i][base + 1] = '>';
                ans[i][w + base - 2] = '<';
            }
            for(int ii = 3; ii < w - 3; ii += 2) {
                int i = ii + base;
                ans[base + 2][i] = '^';
                ans[h + base - 3][i] = 'v';
            }
            for(int ii = 3; ii < h - 3; ii += 2) {
                int i = ii + base;
                ans[i][base + 2] = '<';
                ans[i][w + base - 3] = '>';
            }
            base += 3;
            h -= 6;
            w -= 6;
        }

        if(h == 3 and w == 3) {
            ans[base][base] = '<';
            ans[base][base + 1] = '<';
            ans[base][base + 2] = '^';
            ans[base + 1][base + 2] = '^';
            ans[base + 2][base + 2] = '>';
            ans[base + 2][base + 1] = '>';
            ans[base + 2][base] = 'v';
            ans[base + 1][base] = 'v';
        } else if (h == 5 and w == 5) {
            rep(i, w - 1) {
                ans[base][base + i] = '<';
                ans[h - 1 + base][w - 1 + base - i] = '>';
            }
            rep(i, h - 1) {
                ans[base + i][w - 1 + base] = '^'; 
                ans[h - 1 + base - i][base] = 'v';
            }
            for(int ii = 2; ii < w - 2; ii += 2) {
                int i = base + ii;
                ans[base + 1][i] = 'v';
                ans[h + base - 2][i] = '^';
            }
            for(int ii = 2; ii < h - 2; ii += 2) {
                int i = base + ii;
                ans[i][base + 1] = '>';
                ans[i][w + base - 2] = '<';
            }
        } else if (min(h, w) == 9) {
            assert(max(h, w) != min(h, w));
            if(h < w) {
                auto ret = solve9(w);
                rep(i, h) rep(j, w) ans[base + i][base + j] = ret[i][j];
            } else {
                auto ret = solve9(h);
                rep(i, h) rep(j, w) ans[base + i][base + j] = ret[j][i];
            }
        } else if (min(h, w) == 11) {
            assert(max(h, w) != min(h, w));
            if(h < w) {
                auto ret = solve11(w);
                rep(i, h) rep(j, w) ans[base + i][base + j] = ret[i][j];
            } else {
                auto ret = solve11(h);
                rep(i, h) rep(j, w) ans[base + i][base + j] = ret[j][i];
            }
        } else {
            cout << "No" << endl;
            return;
        }
        cout << "Yes" << endl;
        
        for(string s : ans) {
            cout << s << endl;
        }
    } else cout << "No" << endl;
}
int main() {
    int t; t = 1;
    rep(i, t) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3476kb

input:

3 3

output:

Yes
<<^
v.^
v>>

result:

ok Correct

Test #2:

score: 0
Accepted
time: 0ms
memory: 3520kb

input:

4 4

output:

No

result:

ok Correct : No

Test #3:

score: 0
Accepted
time: 0ms
memory: 3548kb

input:

4 5

output:

No

result:

ok Correct : No

Test #4:

score: -100
Wrong Answer
time: 0ms
memory: 3520kb

input:

11 17

output:

Yes
<<<<<<<<<<<<<<<<^
v.v.v.v.vv.v.v..^
v>.^.<v>.<v>.^.<^
v.<^>.v.^.v.<^>.^
v>.^.^.<<<v>.^.<^
v.<^>>>.v.v.<^>.^
v>.^.v.^.^.^.^.<^
v.<<<v>>>>>>>>>.^
v>.v.v.v.v.v.v.<^
v.^.^.^.^.^.^.^.^
v>>>>>>>>>>>>>>>>

result:

wrong answer Duplicate segment