Submission #34627109
Source Code Expand
#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,n) for (int i=a;i<n;i++)
#define mp(i,j) make_pair(i,j)
int read(){int r;scanf("%d",&r);return r;}
pair<int,int> row(const array<int,4> &M,const pair<int,int> &p){// 行对面点
return {p.first,p.second^M[1]^M[3]};
}
pair<int,int> col(const array<int,4> &M,const pair<int,int> &p){// 列对面点
return {p.first^M[0]^M[2],p.second};
}
// 第一个包含p, 第二不包含p, 纵向切开
pair<array<int,4>,array<int,4>> splitCol(const array<int,4> &M,const pair<int,int> &p){
auto [i0,j0,i1,j1] = M;
auto [pi,pj] = p;
if(pj == j0) return {
{i0,pj,i1,pj},{i0,j0+1,i1,j1}};
else return {
{i0,pj,i1,pj},{i0,j0 ,i1,j1-1}};
}
int h,w;
int res[10][10];
void o(pair<int,int> p, int rev) { // 输出
if(rev) o({p.second,p.first},false);
else {
// res[p.first][p.second] = 1;
// rep(i,1,h+1){
// printf("\t res =>\t ");
// rep(j,1,w+1) printf("%c",".X"[res[i][j]]);
// printf("\n");
// }
printf("%d %d\n",p.first,p.second);
}
}
void line(pair<int,int> s,pair<int,int>t,int rev){
auto [si,sj] = s;
auto [ti,tj] = t;
int dj = tj > sj?1:-1;
if(si == ti) for(int j = sj;j!=tj+dj;j+=dj) o({si,j},rev);
else line({sj,si},{tj,ti},rev^1);
}
void Helper(array<int,4> M,pair<int,int> s,pair<int,int> t/*ij翻转*/){
rep(i,1,h+1){
printf("\t ");
rep(j,1,w+1){
if(mp(i,j) == s) printf("S");
else if(mp(i,j) == t) printf("T");
else if(M[0] <= i && i <= M[2] && M[1] <= j && j <= M[3]) printf("x");
else printf(".");
}
printf("\n");
}
}
void f(array<int,4> M,pair<int,int> s,pair<int,int> t,int rev/*ij翻转*/){
if(s==t) return;
//printf("\tStart [rev = %d]\n",rev);
//Helper(M,s,t);
auto [i0,j0,i1,j1] = M;
auto [si,sj] = s;
auto [ti,tj] = t;
if((ti == i0 || ti == i1) && (tj == j0 || tj == j1)){
if(i0 == i1 || j0 == j1) { // 1xn, nx1
line(s,t,rev);
}else if(abs(i0-i1) == 1 && abs(j0-j1) == 1){ // 2x2
o({si,sj},rev);
rep(i,i0,i1+1)rep(j,j0,j1+1) if(s != mp(i,j) && t != mp(i,j)) o({i,j},rev);
o({ti,tj},rev);
}else if(abs(i0-i1) == 1){ // 2xn
if(sj == tj) { // U字形
f({si,j0,si,j1},s,row(M,s),rev);
f({ti,j0,ti,j1},row(M,t),t,rev);
} else{ // 长城形状
auto [m0,m1] = splitCol(M,s);
line(s,col(M,s),rev);
f(m1,{si^i0^i1,sj+(sj==j0?1:-1)},t,rev);
}
}else if(abs(j0-j1) == 1){
f({j0,i0,j1,i1},{sj,si},{tj,ti},rev^1);
}else if(sj != tj){ // (>2) x (>2)
auto [m0,m1] = splitCol(M,s);
line(s,col(M,s),rev);
f(m1,{si^i0^i1,sj+(sj==j0?1:-1)},t,rev);
}else{ // si != ti
f({j0,i0,j1,i1},{sj,si},{tj,ti},rev^1);
}
}else{
if(abs(i0-i1) == 1){ // 2xn, 但是t不在角上
int dj = tj > sj?1:-1;
for(int j = sj;j!=tj;j+=dj) line({si,j},{si^i0^i1,j},rev);
o({ti^i0^i1,tj},rev);
if(sj == j0)f({i0,tj+1,i1,sj^j0^j1},{i0,tj+dj},{i1,tj+dj},rev);
else f({i0,sj^j0^j1,i1,tj-1},{i0,tj+dj},{i1,tj+dj},rev);
o(t,rev);
} else if(abs(j0-j1) == 1){ // nx2
f({j0,i0,j1,i1},{sj,si},{tj,ti},rev^1);
} else if(sj != tj){ //
auto [m0,m1] = splitCol(M,s);
if(abs(sj-tj) == 1 && si != ti && (ti == i0 || ti == i1)){// 特殊
int dj = tj > sj?1:-1;
int di = ti > si?1:-1;
line(s,col(M,s),rev);
line({ti-di,tj},{si,tj},rev);
if(sj == j0) f({i0,j0+2,i1,j1 },{si,sj+2*dj},{ti,tj+dj},rev);
else f({i0,j0 ,i1,j1-2},{si,sj+2*dj},{ti,tj+dj},rev);
o(t,rev);
}else{
f(m0,s,col(M,s),rev);
f(m1,{si^i0^i1,sj+(sj==j0?1:-1)},t,rev);
}
}else{
f({j0,i0,j1,i1},{sj,si},{tj,ti},rev^1);
}
}
// printf("\t End\n");
}
int main(){
h = read();
w = read();
int a = read();
int b = read();
f({1,1,h,w},{1,1},{a,b},false);
return 0;
}
Submission Info
Submission Time
2022-09-05 10:10:52+0900
Task
H - King's Tour
User
cromarmot
Language
C++ (GCC 9.2.1)
Score
600
Code Size
3907 Byte
Status
AC
Exec Time
12 ms
Memory
3816 KiB
Compile Error
./Main.cpp: In function ‘int read()’:
./Main.cpp:6:23: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
6 | int read(){int r;scanf("%d",&r);return r;}
| ~~~~~^~~~~~~~~
Judge Result
Set Name
Sample
All
Score / Max Score
0 / 0
600 / 600
Status
Set Name
Test Cases
Sample
00_sample_00.txt
All
00_sample_00.txt, 01_small_00.txt, 01_small_01.txt, 01_small_02.txt, 01_small_03.txt, 01_small_04.txt, 01_small_05.txt, 01_small_06.txt, 01_small_07.txt, 01_small_08.txt, 01_small_09.txt, 01_small_10.txt, 01_small_11.txt, 01_small_12.txt, 01_small_13.txt, 01_small_14.txt, 01_small_15.txt, 01_small_16.txt, 01_small_17.txt, 01_small_18.txt, 01_small_19.txt, 01_small_20.txt, 01_small_21.txt, 01_small_22.txt, 01_small_23.txt, 01_small_24.txt, 01_small_25.txt, 01_small_26.txt, 01_small_27.txt, 01_small_28.txt, 01_small_29.txt, 01_small_30.txt, 01_small_31.txt, 01_small_32.txt, 01_small_33.txt, 01_small_34.txt, 01_small_35.txt, 01_small_36.txt, 01_small_37.txt, 01_small_38.txt, 01_small_39.txt, 01_small_40.txt, 01_small_41.txt, 01_small_42.txt, 01_small_43.txt, 01_small_44.txt, 01_small_45.txt, 01_small_46.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 03_corner_00.txt, 03_corner_01.txt, 03_corner_02.txt, 03_corner_03.txt, 03_corner_04.txt, 03_corner_05.txt, 03_corner_06.txt, 03_corner_07.txt, 03_corner_08.txt, 03_corner_09.txt, 03_corner_10.txt, 03_corner_11.txt, 03_corner_12.txt, 03_corner_13.txt, 03_corner_14.txt, 03_corner_15.txt, 03_corner_16.txt, 03_corner_17.txt, 03_corner_18.txt, 03_corner_19.txt, 03_corner_20.txt, 03_corner_21.txt, 03_corner_22.txt, 03_corner_23.txt, 03_corner_24.txt, 04_min_H_W_2_00.txt, 04_min_H_W_2_01.txt, 04_min_H_W_2_02.txt, 04_min_H_W_2_03.txt, 04_min_H_W_2_04.txt, 04_min_H_W_2_05.txt, 04_min_H_W_2_06.txt, 04_min_H_W_2_07.txt, 05_hack_00.txt, 05_hack_01.txt, 05_hack_02.txt, 05_hack_03.txt, 05_hack_04.txt, 05_hack_05.txt, 05_hack_06.txt, 05_hack_07.txt, 05_hack_08.txt, 05_hack_09.txt, 05_hack_10.txt, 05_hack_11.txt, 05_hack_12.txt, 05_hack_13.txt, 05_hack_14.txt, 05_hack_15.txt, 05_hack_16.txt, 05_hack_17.txt, 05_hack_18.txt, 05_hack_19.txt
Case Name
Status
Exec Time
Memory
00_sample_00.txt
AC
6 ms
3700 KiB
01_small_00.txt
AC
2 ms
3788 KiB
01_small_01.txt
AC
4 ms
3740 KiB
01_small_02.txt
AC
2 ms
3788 KiB
01_small_03.txt
AC
3 ms
3740 KiB
01_small_04.txt
AC
2 ms
3580 KiB
01_small_05.txt
AC
3 ms
3668 KiB
01_small_06.txt
AC
2 ms
3580 KiB
01_small_07.txt
AC
2 ms
3740 KiB
01_small_08.txt
AC
3 ms
3812 KiB
01_small_09.txt
AC
2 ms
3712 KiB
01_small_10.txt
AC
2 ms
3696 KiB
01_small_11.txt
AC
2 ms
3716 KiB
01_small_12.txt
AC
2 ms
3584 KiB
01_small_13.txt
AC
2 ms
3584 KiB
01_small_14.txt
AC
2 ms
3628 KiB
01_small_15.txt
AC
2 ms
3716 KiB
01_small_16.txt
AC
2 ms
3724 KiB
01_small_17.txt
AC
2 ms
3740 KiB
01_small_18.txt
AC
2 ms
3696 KiB
01_small_19.txt
AC
1 ms
3584 KiB
01_small_20.txt
AC
2 ms
3740 KiB
01_small_21.txt
AC
2 ms
3812 KiB
01_small_22.txt
AC
2 ms
3808 KiB
01_small_23.txt
AC
2 ms
3720 KiB
01_small_24.txt
AC
2 ms
3696 KiB
01_small_25.txt
AC
3 ms
3696 KiB
01_small_26.txt
AC
2 ms
3700 KiB
01_small_27.txt
AC
2 ms
3664 KiB
01_small_28.txt
AC
2 ms
3612 KiB
01_small_29.txt
AC
1 ms
3704 KiB
01_small_30.txt
AC
2 ms
3712 KiB
01_small_31.txt
AC
3 ms
3720 KiB
01_small_32.txt
AC
2 ms
3712 KiB
01_small_33.txt
AC
3 ms
3736 KiB
01_small_34.txt
AC
2 ms
3808 KiB
01_small_35.txt
AC
2 ms
3812 KiB
01_small_36.txt
AC
2 ms
3716 KiB
01_small_37.txt
AC
2 ms
3700 KiB
01_small_38.txt
AC
2 ms
3668 KiB
01_small_39.txt
AC
2 ms
3812 KiB
01_small_40.txt
AC
2 ms
3612 KiB
01_small_41.txt
AC
3 ms
3716 KiB
01_small_42.txt
AC
2 ms
3740 KiB
01_small_43.txt
AC
2 ms
3576 KiB
01_small_44.txt
AC
2 ms
3720 KiB
01_small_45.txt
AC
3 ms
3668 KiB
01_small_46.txt
AC
2 ms
3624 KiB
02_random_00.txt
AC
2 ms
3720 KiB
02_random_01.txt
AC
2 ms
3624 KiB
02_random_02.txt
AC
3 ms
3668 KiB
02_random_03.txt
AC
3 ms
3740 KiB
02_random_04.txt
AC
5 ms
3624 KiB
02_random_05.txt
AC
3 ms
3716 KiB
02_random_06.txt
AC
3 ms
3584 KiB
02_random_07.txt
AC
2 ms
3712 KiB
02_random_08.txt
AC
3 ms
3572 KiB
02_random_09.txt
AC
3 ms
3696 KiB
03_corner_00.txt
AC
2 ms
3712 KiB
03_corner_01.txt
AC
2 ms
3716 KiB
03_corner_02.txt
AC
3 ms
3628 KiB
03_corner_03.txt
AC
2 ms
3788 KiB
03_corner_04.txt
AC
2 ms
3712 KiB
03_corner_05.txt
AC
3 ms
3696 KiB
03_corner_06.txt
AC
2 ms
3624 KiB
03_corner_07.txt
AC
3 ms
3700 KiB
03_corner_08.txt
AC
2 ms
3724 KiB
03_corner_09.txt
AC
2 ms
3584 KiB
03_corner_10.txt
AC
2 ms
3720 KiB
03_corner_11.txt
AC
3 ms
3716 KiB
03_corner_12.txt
AC
5 ms
3572 KiB
03_corner_13.txt
AC
2 ms
3736 KiB
03_corner_14.txt
AC
2 ms
3716 KiB
03_corner_15.txt
AC
3 ms
3580 KiB
03_corner_16.txt
AC
2 ms
3632 KiB
03_corner_17.txt
AC
6 ms
3712 KiB
03_corner_18.txt
AC
3 ms
3740 KiB
03_corner_19.txt
AC
3 ms
3808 KiB
03_corner_20.txt
AC
4 ms
3612 KiB
03_corner_21.txt
AC
2 ms
3716 KiB
03_corner_22.txt
AC
3 ms
3808 KiB
03_corner_23.txt
AC
3 ms
3612 KiB
03_corner_24.txt
AC
2 ms
3584 KiB
04_min_H_W_2_00.txt
AC
2 ms
3572 KiB
04_min_H_W_2_01.txt
AC
2 ms
3696 KiB
04_min_H_W_2_02.txt
AC
2 ms
3792 KiB
04_min_H_W_2_03.txt
AC
2 ms
3612 KiB
04_min_H_W_2_04.txt
AC
2 ms
3812 KiB
04_min_H_W_2_05.txt
AC
2 ms
3696 KiB
04_min_H_W_2_06.txt
AC
2 ms
3588 KiB
04_min_H_W_2_07.txt
AC
2 ms
3628 KiB
05_hack_00.txt
AC
3 ms
3664 KiB
05_hack_01.txt
AC
5 ms
3716 KiB
05_hack_02.txt
AC
6 ms
3740 KiB
05_hack_03.txt
AC
6 ms
3716 KiB
05_hack_04.txt
AC
4 ms
3580 KiB
05_hack_05.txt
AC
4 ms
3580 KiB
05_hack_06.txt
AC
7 ms
3624 KiB
05_hack_07.txt
AC
6 ms
3816 KiB
05_hack_08.txt
AC
4 ms
3716 KiB
05_hack_09.txt
AC
5 ms
3672 KiB
05_hack_10.txt
AC
5 ms
3716 KiB
05_hack_11.txt
AC
5 ms
3720 KiB
05_hack_12.txt
AC
5 ms
3700 KiB
05_hack_13.txt
AC
6 ms
3624 KiB
05_hack_14.txt
AC
8 ms
3712 KiB
05_hack_15.txt
AC
3 ms
3724 KiB
05_hack_16.txt
AC
12 ms
3724 KiB
05_hack_17.txt
AC
4 ms
3740 KiB
05_hack_18.txt
AC
7 ms
3696 KiB
05_hack_19.txt
AC
8 ms
3816 KiB