Init
This commit is contained in:
58
ACMOJ-1741.cpp
Normal file
58
ACMOJ-1741.cpp
Normal file
@ -0,0 +1,58 @@
|
||||
#include <cstdio>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
struct ElementType {
|
||||
int r, c, p;
|
||||
ElementType() {}
|
||||
ElementType(int __r, int __c, int __p) : r(__r), c(__c), p(__p) {}
|
||||
};
|
||||
vector<ElementType> res;
|
||||
void Calc(int R1, int R2, int C1, int C2, int pr, int pc) {
|
||||
if (R1 == R2 && C1 == C2) return;
|
||||
int MR = (R1 + R2) >> 1;
|
||||
int MC = (C1 + C2) >> 1;
|
||||
if (pr <= MR && pc <= MC) {
|
||||
res.push_back(ElementType(MR + 1, MC + 1, 1));
|
||||
Calc(R1, MR, C1, MC, pr, pc);
|
||||
Calc(R1, MR, MC + 1, C2, MR, MC + 1);
|
||||
Calc(MR + 1, R2, C1, MC, MR + 1, MC);
|
||||
Calc(MR + 1, R2, MC + 1, C2, MR + 1, MC + 1);
|
||||
return;
|
||||
}
|
||||
if (pr <= MR && pc > MC) {
|
||||
res.push_back(ElementType(MR + 1, MC, 2));
|
||||
Calc(R1, MR, C1, MC, MR, MC);
|
||||
Calc(R1, MR, MC + 1, C2, pr, pc);
|
||||
Calc(MR + 1, R2, C1, MC, MR + 1, MC);
|
||||
Calc(MR + 1, R2, MC + 1, C2, MR + 1, MC + 1);
|
||||
return;
|
||||
}
|
||||
if (pr > MR && pc <= MC) {
|
||||
res.push_back(ElementType(MR, MC + 1, 3));
|
||||
Calc(R1, MR, C1, MC, MR, MC);
|
||||
Calc(R1, MR, MC + 1, C2, MR, MC + 1);
|
||||
Calc(MR + 1, R2, C1, MC, pr, pc);
|
||||
Calc(MR + 1, R2, MC + 1, C2, MR + 1, MC + 1);
|
||||
return;
|
||||
}
|
||||
if (pr > MR && pc > MC) {
|
||||
res.push_back(ElementType(MR, MC, 4));
|
||||
Calc(R1, MR, C1, MC, MR, MC);
|
||||
Calc(R1, MR, MC + 1, C2, MR, MC + 1);
|
||||
Calc(MR + 1, R2, C1, MC, MR + 1, MC);
|
||||
Calc(MR + 1, R2, MC + 1, C2, pr, pc);
|
||||
return;
|
||||
}
|
||||
}
|
||||
int main() {
|
||||
#ifdef local
|
||||
freopen("pro.in", "r", stdin);
|
||||
#endif
|
||||
int k, x, y;
|
||||
scanf("%d%d%d", &k, &x, &y);
|
||||
Calc(1, 1 << k, 1, 1 << k, x, y);
|
||||
for (int i = 0; i < res.size(); i++)
|
||||
printf("%d %d %d\n", res[i].r, res[i].c, res[i].p);
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user