暴力分讨写吐了,结果 WA 一个点。
#include<bits/stdc++.h>
using namespace std;
int n, m, x, y;
int ans[1005][1005];
string s = ".^v<>";
void fill_hor(int pos_x, int pos_y){
ans[pos_x][pos_y] = 3;
ans[pos_x][pos_y + 1] = 4;
}
void fill_ver(int pos_x, int pos_y){
ans[pos_x][pos_y] = 1;
ans[pos_x + 1][pos_y] = 2;
}
void check(){
if (x || y){
cout << "NO";
exit(0);
}
}
void print(){
check();
cout << "YES\n";
for (int i = 1; i <= n; i++){
for (int j = 1; j <= m; j++)
cout << s[ans[i][j]];
cout << "\n";
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n >> m >> x >> y;
if ((x + y << 1) > n * m){
cout << "NO";
return 0;
}
if (!(n & 1) && !(m & 1)){
for (int i = 1; i < n; i += 2)
for (int j = 1; j < m; j += 2){
if (x >= 2){
fill_hor(i, j);
fill_hor(i + 1, j);
x -= 2;
}else if (y >= 2){
fill_ver(i, j);
fill_ver(i, j + 1);
y -= 2;
}else if (x == 1){
fill_hor(i, j);
--x;
}else if (y == 1){
fill_ver(i, j);
--y;
}
}
print();
}else if ((n & 1) && !(m & 1)){
for (int i = 1; i < m; i += 2){
if (x){
fill_hor(n, i);
--x;
}
}
for (int i = 1; i < n - 1; i += 2)
for (int j = 1; j < m; j += 2){
if (x >= 2){
fill_hor(i, j);
fill_hor(i + 1, j);
x -= 2;
}else if (y >= 2){
fill_ver(i, j);
fill_ver(i, j + 1);
y -= 2;
}else if (x == 1){
fill_hor(i, j);
--x;
}else if (y == 1){
fill_ver(i, j);
--y;
}
}
print();
}else if (!(n & 1) && (m & 1)){
for (int i = 1; i < n; i += 2){
if (y){
fill_ver(i, m);
--y;
}
}
for (int i = 1; i < n; i += 2)
for (int j = 1; j < m - 1; j += 2){
if (x >= 2){
fill_hor(i, j);
fill_hor(i + 1, j);
x -= 2;
}else if (y >= 2){
fill_ver(i, j);
fill_ver(i, j + 1);
y -= 2;
}else if (x == 1){
fill_hor(i, j);
--x;
}else if (y == 1){
fill_ver(i, j);
--y;
}
}
print();
}else if ((n & 1) && (m & 1)){
int tx = x, ty = y;
for (int i = 1; i < n - 1; i += 2){
if (y){
fill_ver(i, m);
--y;
}
}
for (int i = 1; i < m - 1; i += 2){
if (x){
fill_hor(n, i);
--x;
}
}
for (int i = 1; i < n - 1; i += 2)
for (int j = 1; j < m - 1; j += 2){
if (x >= 2){
fill_hor(i, j);
fill_hor(i + 1, j);
x -= 2;
}else if (y >= 2){
fill_ver(i, j);
fill_ver(i, j + 1);
y -= 2;
}else if (x == 1){
fill_hor(i, j);
--x;
}else if (y == 1){
fill_ver(i, j);
--y;
}
}
if (x || y){
x = tx, y = ty;
memset(ans, 0, sizeof ans);
for (int i = 1; i < n - 3; i += 2){
if (y){
fill_ver(i, m);
--y;
}
}
for (int i = 1; i < m - 3; i += 2){
if (x){
fill_hor(n, i);
--x;
}
}
fill_hor(n - 2, m - 2);
fill_ver(n - 2, m);
fill_ver(n - 1, m - 2);
fill_hor(n, m - 1);
x -= 2;
y -= 2;
for (int i = 1; i < n - 1; i += 2)
for (int j = 1; j < m - 1; j += 2){
if (i >= n - 3 && j >= n - 3)
break;
if (x >= 2){
fill_hor(i, j);
fill_hor(i + 1, j);
x -= 2;
}else if (y >= 2){
fill_ver(i, j);
fill_ver(i, j + 1);
y -= 2;
}else if (x == 1){
fill_hor(i, j);
--x;
}else if (y == 1){
fill_ver(i, j);
--y;
}
}
}
print();
}
return 0;
}