QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#696884#6677. Puzzle: SashiganepppwolfWA 0ms3564kbC++208.0kb2024-11-01 05:04:502024-11-01 05:04:51

Judging History

你现在查看的是最新测评结果

  • [2024-11-01 05:04:51]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3564kb
  • [2024-11-01 05:04:50]
  • 提交

answer

#include <bits/stdc++.h>

using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
using i128 = __int128;

int main() {
	std::ios::sync_with_stdio(false);
	std::cin.tie(nullptr);

	int n, a, b;
	std::cin >> n >> a >> b;
	if (n == 1) {
		std::cout << "Yes\n0";
		return 0;
	}

	int r = std::max(std::min(n - a + 1, a), std::min(n - b + 1, b));
	int dx[4] = {-1, -1, 1, 1}, dy[4] = {-1, 1, 1, -1};
	std::vector<std::array<int, 4>> ans;
	if (a > n / 2 && b <= n / 2) {
		//std::cerr << "zx\n";
		int pa = n - r + 1, pb = r;
		int op = 0;
		for (int i = 0; i < 4; i++) {
			int px = dx[i] + a, py = dy[i] + b;
			if (px <= n && px >= pa && py <= pb && py >= 1) {
				op = i;
				break;
			}
		}
		int nop = 0;
		if (a == pa || a == n || a == 1) {
			if (op == 0) {
				nop = 1;
			} else if (op == 1) {
				nop = 0;
			} else if (op == 2) {
				nop = 3;
			} else if (op == 3) {
				nop = 2;
			}
		} else if (b == pb || b == n || b == 1) {
			if (op == 0) {
				nop = 3;
			} else if (op == 1) {
				nop = 2;
			} else if (op == 2) {
				nop = 1;
			} else if (op == 3) {
				nop = 0;
			}
		}
		//std::cerr << "nop " << nop << "\n";
		a += dx[op], b += dy[op];
		int cnt = 1;
		while (a <= n && a >= pa && b <= pb && b > 0) {
			ans.push_back({a, b, -dx[op] * cnt, -dx[op] * cnt});
			a += dx[op];
			b += dy[op];
			cnt++;
		}
		if (op == 0 && nop == 3) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 0 && nop == 1) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 0) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 2) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 2 && nop == 3) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 2 && nop == 1) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 3 && nop == 2) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 3 && nop == 0) {
			a += (cnt + 1) * dx[nop];
		}
		while (a <= n && a >= pa && b <= pb && b > 0) {
			ans.push_back({a, b, -dx[nop] * cnt, -dy[nop] * cnt});
			a += dx[nop];
			b += dy[nop];
			cnt++;
		}
		a = pa - 1;
		b = pb + 1;
		//std::cerr << a << " " << b << " " << cnt << "\n";
		int nnop = 1;
		while (a < pa && a >= 1 && b > pb && b <= n) {
			ans.push_back({a, b, -dx[nnop] * cnt, dx[nnop] * cnt});
			a += dx[nnop];
			b += dy[nnop];
			cnt++;
		}
	} else if (a > n / 2 && b > n / 2) {
		//std::cerr << "yx\n";
		int pa = n - r + 1, pb = n - r + 1;
		int op = 0;
		for (int i = 0; i < 4; i++) {
			int px = dx[i] + a, py = dy[i] + b;
			if (px <= n && px >= pa && py <= n && py >= pb) {
				op = i;
				break;
			}
		}
		int nop = 0;
		if (a == pa || a == n || a == 1) {
			if (op == 0) {
				nop = 1;
			} else if (op == 1) {
				nop = 0;
			} else if (op == 2) {
				nop = 3;
			} else if (op == 3) {
				nop = 2;
			}
		} else if (b == pb || b == n || b == 1) {
			if (op == 0) {
				nop = 3;
			} else if (op == 1) {
				nop = 2;
			} else if (op == 2) {
				nop = 1;
			} else if (op == 3) {
				nop = 0;
			}
		}
		a += dx[op], b += dy[op];
		int cnt = 1;
		while (a <= n && a >= pa && b <= n && b >= pb) {
			ans.push_back({a, b, dx[op] * cnt, dx[op] * cnt});
			//std::cerr << a << " " << b << "\n";
			a += dx[op];
			b += dy[op];
			cnt++;
		}
		if (op == 0 && nop == 3) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 0 && nop == 1) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 0) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 2) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 2 && nop == 3) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 2 && nop == 1) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 3 && nop == 2) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 3 && nop == 0) {
			a += (cnt + 1) * dx[nop];
		}
		while (a <= n && a >= pa && b <= n && b >= pb) {
			ans.push_back({a, b, -dx[nop] * cnt, -dy[nop] * cnt});
			a += dx[nop];
			b += dy[nop];
			cnt++;
		}
		a = pa - 1;
		b = pb - 1;
		int nnop = 0;
		//std::cerr << nnop << " " << pa << " " << pb << "\n";
		while (a < pa && a >= 1 && b < pb && b >= 1) {
			ans.push_back({a, b, -dx[nnop] * cnt, -dx[nnop] * cnt});
			a += dx[nnop];
			b += dy[nnop];
			cnt++;
		}
	} else if (a <= n / 2 && b > n / 2) {
		//std::cerr << "ys\n";
		int pa = r, pb = n - r + 1;
		int op = 0;
		for (int i = 0; i < 4; i++) {
			int px = dx[i] + a, py = dy[i] + b;
			if (px <= n && px >= pa && py <= n && py >= pb) {
				op = i;
				break;
			}
		}
		int nop = 0;
		if (a == pa || a == n || a == 1) {
			if (op == 0) {
				nop = 1;
			} else if (op == 1) {
				nop = 0;
			} else if (op == 2) {
				nop = 3;
			} else if (op == 3) {
				nop = 2;
			}
		} else if (b == pb || b == n || b == 1) {
			if (op == 0) {
				nop = 3;
			} else if (op == 1) {
				nop = 2;
			} else if (op == 2) {
				nop = 1;
			} else if (op == 3) {
				nop = 0;
			}
		}
		a += dx[op], b += dy[op];
		int cnt = 1;
		while (a <= pa && a >= 1 && b <= n && b >= pb) {
			ans.push_back({a, b, -dx[op] * cnt, -dx[op] * cnt});
			a += dx[op];
			b += dy[op];
			cnt++;
		}
		if (op == 0 && nop == 3) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 0 && nop == 1) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 0) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 2) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 2 && nop == 3) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 2 && nop == 1) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 3 && nop == 2) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 3 && nop == 0) {
			a += (cnt + 1) * dx[nop];
		}
		while (a <= pa && a >= 1 && b <= n && b >= pb) {
			ans.push_back({a, b, -dx[nop] * cnt, -dy[nop] * cnt});
			a += dx[nop];
			b += dy[nop];
			cnt++;
		}
		//std::cerr << a << " " << b << " " << cnt << "\n";
		a = pa + 1;
		b = pb - 1;
		//std::cerr << a << " " << b << " " << cnt << "\n";
		int nnop = 3;
		while (a > pa && a <= n && b < pb && b >= 1) {
			ans.push_back({a, b, -dx[nnop] * cnt, dx[nnop] * cnt});
			a += dx[nnop];
			b += dy[nnop];
			cnt++;
		}
	} else if (a <= n / 2 && b <= n / 2) {
		//std::cerr << "zs\n";
		int pa = r, pb = r;
		int op = 0;
		for (int i = 0; i < 4; i++) {
			int px = dx[i] + a, py = dy[i] + b;
			if (px <= n && px >= pa && py <= n && py >= pb) {
				op = i;
				break;
			}
		}
		int nop = 0;
		if (a == pa || a == n || a == 1) {
			if (op == 0) {
				nop = 1;
			} else if (op == 1) {
				nop = 0;
			} else if (op == 2) {
				nop = 3;
			} else if (op == 3) {
				nop = 2;
			}
		} else if (b == pb || b == n || b == 1) {
			if (op == 0) {
				nop = 3;
			} else if (op == 1) {
				nop = 2;
			} else if (op == 2) {
				nop = 1;
			} else if (op == 3) {
				nop = 0;
			}
		}
		a += dx[op], b += dy[op];
		int cnt = 1;
		while (a <= pa && a >= 1 && b <= pb && b >= 1) {
			ans.push_back({a, b, -dx[op] * cnt, -dx[op] * cnt});
			a += dx[op];
			b += dy[op];
			cnt++;
		}
		if (op == 0 && nop == 3) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 0 && nop == 1) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 0) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 1 && nop == 2) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 2 && nop == 3) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 2 && nop == 1) {
			a += (cnt + 1) * dx[nop];
		} else if (op == 3 && nop == 2) {
			b += (cnt + 1) * dy[nop];
		} else if (op == 3 && nop == 0) {
			a += (cnt + 1) * dx[nop];
		}
		while (a <= pa && a >= 1 && b <= pb && b >= 1) {
			ans.push_back({a, b, -dx[nop] * cnt, -dy[nop] * cnt});
			a += dx[nop];
			b += dy[nop];
			cnt++;
		}
		a = pa + 1;
		b = pb + 1;
		int nnop = 2;
		while (a > pa && a <= n && b <= n && b > pb) {
			ans.push_back({a, b, -dx[nnop] * cnt, -dx[nnop] * cnt});
			a += dx[nnop];
			b += dy[nnop];
			cnt++;
			//std::cerr << a << " " << b << " " << cnt << "\n";
		}
	}
	std::cout << "Yes\n" << ans.size() << "\n";
	for (auto [a, b, x, y] : ans) {
		std::cout << a << " " << b << " " << x << " " << y << "\n";
	}


	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 3564kb

input:

5 3 4

output:

Yes
4
4 5 1 1
5 3 -2 2
2 2 3 3
1 1 4 4

result:

wrong answer L shape #1 out of bounds. (test case 1)