結果

問題 No.3744 XY Tiling
コンテスト
ユーザー p2
提出日時 2026-09-19 18:02:28
言語 C++23(gcc16)
(gcc 16.1.0 + boost 1.92.0 + ACL)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
RE  
実行時間 -
コード長 2,996 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,889 ms
コンパイル使用メモリ 365,920 KB
実行使用メモリ 10,048 KB
最終ジャッジ日時 2026-09-19 18:02:39
合計ジャッジ時間 8,843 ms
ジャッジサーバーID
(参考情報)
judge5_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
部分点 60 % AC * 9 RE * 10
満点 40 % AC * 9 RE * 51
合計 5 * 0% = 0 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
#include<cassert>
using namespace std;
#define all(x) begin(x), end(x)
#define sz(x) (int)(x).size()
#define pb push_back
#define ppb pop_back
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef pair<ll, ll> pl;
typedef vector<ll> vl;
typedef vector<vl> vvl;
#define rep2(i, n) for (ll i = 0; i < (n); ++i)
#define rep3(i, a, b) for (ll i = (a); i < (b); ++i)
#define rep_select(_1, _2, _3, name, ...) name
#define rep(...) rep_select(__VA_ARGS__, rep3, rep2)(__VA_ARGS__)
#define rrep2(i, n) for (ll i = (ll)(n) - 1; i >= 0; --i)
#define rrep3(i, a, b) for (ll i = (ll)(b) - 1; i >= (ll)(a); --i)
#define rrep(...) rep_select(__VA_ARGS__, rrep3, rrep2)(__VA_ARGS__)

vl dx={1,0,-1,0};
vl dy={0,1,0,-1};

int main() {
  ll h,w;
  cin >> h >> w;
  bool swp=false;
  if(h>w) swap(h,w),swp=true;

  vvl board(h,vl(w,-1));
  vector<pair<pl,pl>> ans;

  ll type=4;


  assert(h%2==0&&w%2==0);
  if(h==2){
    rep(i,w){
      ans.pb({{0,i},{1,i}});
      board[0][i]=0;
      board[1][i]=1;
    }
    type=2;

  }
  if(h==4){
    rep(i,w){
      ans.pb({{0,i},{1,i}});
      ans.pb({{2,i},{3,i}});
      board[0][i]=0;
      board[1][i]=1;
      board[2][i]=1;
      board[3][i]=2;
    }
    type=3;

  }

  ll paint=0;

  if(h>=6){
    vl x={0,h-1,h-1,0};
    vl y={0,0,w-1,w-1};
    vl dir={0,1,2,3};


    rep(i,4){
      board[x[i]][y[i]]=i;
      paint++;
    }
    ll ccnt=0;
    while(paint<h*w){
      ccnt++;
      ll cnt=0;
      rep(i,4){
        
      
        ll xx=x[i],yy=y[i];

        if(dir[i]==0){
          cnt=h-ccnt-xx;
        }
        else if(dir[i]==1){
          cnt=w-ccnt-yy;
        }
        else if(dir[i]==2){
          cnt=xx-ccnt;
        }
        else{
          cnt=yy-ccnt;
        }

        if(dir[i]%2==0){
          rep(j,h-cnt-1){
            xx+=dx[dir[i]];
            yy+=dy[dir[i]];
            board[xx][yy]=i;
            paint++;

            //cout << xx << yy << endl;
          }
        }
        else{
          rep(j,w-cnt-1){
            xx+=dx[dir[i]];
            yy+=dy[dir[i]];
            board[xx][yy]=i;
            paint++;

            //cout << xx << yy << endl;
          }
        }
        x[i]=xx;
        y[i]=yy;
        dir[i]++;
        dir[i]%=4;
      }
      //cout << cnt << endl;
      
    }


    for(ll i=0;i<h;i+=2){
      for(ll j=0;j<w;j+=2){
        if(board[i][j]==board[i+1][j]){
          ans.pb({{i,j},{i,j+1}});
          ans.pb({{i+1,j},{i+1,j+1}});
        }
        else{
          ans.pb({{i,j},{i+1,j}});
          ans.pb({{i,j+1},{i+1,j+1}});
        }
      }
    }

  }

  





  cout << type << endl;
  for(auto [p,q]:ans){
    auto [a,b]=p;
    auto [c,d]=q;

    
    if(!swp){
      cout << a+1 << " " << b+1 << " " << board[a][b]+1 << " " << c+1 << " " << d+1 << " " << board[c][d]+1 << endl;
    }
    else{
      cout << b+1 << " " << a+1 << " " << board[a][b]+1 << " " << d+1 << " " << c+1 << " " << board[c][d]+1 << endl;
    }
  }

}
0