제출 #526565

#제출 시각아이디문제언어결과실행 시간메모리
526565asdf2727Red-blue table (IZhO19_stones)C++17
100 / 100
37 ms1264 KiB
#include <iostream>

int main() {
	int nrt, sizx, sizy;
	int sizx1, sizx2, sizy1, sizy2;
	int ans;
	int pos;
	std::cin >> nrt;
	while (nrt--) {
		std::cin >> sizx >> sizy;
		if (sizx <= sizy && sizx < 3) {
			std::cout << sizy << '\n';
			for (int index = 0; index < sizx; index++) {
				for (int index2 = 0; index2 < sizy; index2++) {
					std::cout << '-';
				}
				std::cout << '\n';
			}
		}
		else if (sizy < 3) {
			std::cout << sizx << '\n';
			for (int index = 0; index < sizx; index++) {
				for (int index2 = 0; index2 < sizy; index2++) {
					std::cout << '+';
				}
				std::cout << '\n';
			}
		}
		else {
			sizx1 = (sizx - 1) >> 1;
			sizx2 = (sizx >> 1) + 1;
			sizy1 = (sizy - 1) >> 1;
			sizy2 = (sizy >> 1) + 1;
			ans = sizx + sizy + sizx1 + sizy1 - sizx2 - sizy2;
			if (ans < sizy + (((sizx - 1) >> 1) * sizy) / ((sizy >> 1) + 1)) {
				std::cout << sizy + (((sizx - 1) >> 1) * sizy) / ((sizy >> 1) + 1) << '\n';
				pos = 0;
				for (int index = 0; index < (((sizx - 1) >> 1) * sizy) / ((sizy >> 1) + 1); index++) {
					if (pos + (sizy >> 1) + 1 > sizy) {
						for (int index2 = 0; index2 < pos + (sizy >> 1) + 1 - sizy; index2++) {
							std::cout << '+';
						}
						for (int index2 = pos + (sizy >> 1) + 1 - sizy; index2 < pos; index2++) {
							std::cout << '-';
						}
						for (int index2 = pos; index2 < sizy; index2++) {
							std::cout << '+';
						}
						pos += (sizy >> 1) + 1 - sizy;
					}
					else {
						for (int index2 = 0; index2 < pos; index2++) {
							std::cout << '-';
						}
						for (int index2 = pos; index2 < pos + (sizy >> 1) + 1; index2++) {
							std::cout << '+';
						}
						for (int index2 = pos + (sizy >> 1) + 1; index2 < sizy; index2++) {
							std::cout << '-';
						}
						pos += (sizy >> 1) + 1;
					}
					std::cout << '\n';
				}
				for (int index = (((sizx - 1) >> 1) * sizy) / ((sizy >> 1) + 1); index < sizx; index++) {
					for (int index2 = 0; index2 < sizy; index2++) {
						std::cout << '-';
					}
					std::cout << '\n';
				}
			}
			else if (ans < sizx + (((sizy - 1) >> 1) * sizx) / ((sizx >> 1) + 1)) {
				std::cout << sizx + (((sizy - 1) >> 1) * sizx) / ((sizx >> 1) + 1) << '\n';
				for (int index = 0; index < sizx; index++) {
					pos = 0;
					for (int index2 = 0; index2 < (((sizy - 1) >> 1) * sizx) / ((sizx >> 1) + 1); index2++) {
						if (pos + (sizx >> 1) + 1 > sizx) {
							if (pos + (sizx >> 1) + 1 - sizx <= index && index < pos) {
								std::cout << '+';
							}
							else {
								std::cout << '-';
							}
							pos += (sizx >> 1) + 1 - sizx;
						}
						else {
							if (pos <= index && index < pos + (sizx >> 1) + 1) {
								std::cout << '-';
							}
							else {
								std::cout << '+';
							}
							pos += (sizx >> 1) + 1;
						}
					}
					for (int index2 = (((sizy - 1) >> 1) * sizx) / ((sizx >> 1) + 1); index2 < sizy; index2++) {
						std::cout << '+';
					}
					std::cout << '\n';
				}
			}
			else {
				std::cout << ans << '\n';
				for (int index = 0; index < sizx1; index++) {
					for (int index2 = 0; index2 < sizy1; index2++) {
						std::cout << '-';
					}
					for (int index2 = sizy1; index2 < sizy; index2++) {
						std::cout << '+';
					}
					std::cout << '\n';
				}
				for (int index = sizx1; index < sizx2; index++) {
					for (int index2 = 0; index2 < sizy; index2++) {
						std::cout << '-';
					}
					std::cout << '\n';
				}
				for (int index = sizx2; index < sizx; index++) {
					for (int index2 = 0; index2 < sizy2; index2++) {
						std::cout << '+';
					}
					for (int index2 = sizy2; index2 < sizy; index2++) {
						std::cout << '-';
					}
					std::cout << '\n';
				}
			}
		}
	}
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...