怎么又 WA 一个点/ll
查看原帖
怎么又 WA 一个点/ll
482610
CEFqwq楼主2025/1/19 18:20

暴力分讨写吐了,结果 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;
}
2025/1/19 18:20
加载中...