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
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
AC × 1
AC × 111
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