結果
| 問題 |
No.2112 All 2x2 are Equal
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2022-10-05 22:18:48 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,753 bytes |
| コンパイル時間 | 2,349 ms |
| コンパイル使用メモリ | 199,856 KB |
| 最終ジャッジ日時 | 2025-02-07 22:02:19 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 2 |
| other | RE * 34 |
ソースコード
// 入力フォーマットチェックその2
#include<bits/stdc++.h>
using namespace std;
using ll = int;
#define UNTIE ios_base::sync_with_stdio( false ); cin.tie( nullptr )
#define GETLINE( A ) string A; getline( cin , A )
#define QUIT return 0
// 入力フォーマットチェック用
// #define CHECK_REDUNDANT_INPUT string VARIABLE_FOR_CHECK_REDUNDANT_INPUT = ""; cin >> VARIABLE_FOR_CHECK_REDUNDANT_INPUT; assert( VARIABLE_FOR_CHECK_REDUNDANT_INPUT == "" ); assert( ! cin );
#define CHECK_REDUNDANT_INPUT string VARIABLE_FOR_CHECK_REDUNDANT_INPUT = ""; getline( cin , VARIABLE_FOR_CHECK_REDUNDANT_INPUT ); assert( VARIABLE_FOR_CHECK_REDUNDANT_INPUT == "" ); assert( ! cin );
#define STOI( S , N , BOUND ) ll N = 0; { bool VARIABLE_FOR_POSITIVITY_FOR_STOI = true; assert( S != "" ); if( S.substr( 0 , 1 ) == "-" ){ VARIABLE_FOR_POSITIVITY_FOR_STOI = false; S = S.substr( 1 ); assert( S != "" ); } assert( S.substr( 0 , 1 ) != " " ); while( S == "" ? false : S.substr( 0 , 1 ) != " " ){ assert( N < BOUND / 10 ? true : N == BOUND / 10 && stoi( S.substr( 0 , 1 ) ) < BOUND % 10 ); N = N * 10 + stoi( S.substr( 0 , 1 ) ); S = S.substr( 1 ); } if( ! VARIABLE_FOR_POSITIVITY_FOR_STOI ){ N *= -1; } }
int main()
{
UNTIE;
constexpr const int bound = 1001;
GETLINE( H_str );
STOI( H_str , H , bound );
GETLINE( W_str );
STOI( W_str , W , bound );
CHECK_REDUNDANT_INPUT;
int minmax[2] = { 1 , H * W };
constexpr const int incrdecr[2] = { 1 , -1 };
int A[bound][bound];
int h = 0;
int w = 0;
int index;
bool transpose = W % 2 == 0 && H % 2 == 1;
if( transpose ){
swap( H , W );
}
while( h + 1 < H ){
w = 0;
index = 0;
int ( &Ah )[bound] = A[h];
int ( &Ah_plus )[bound] = A[h+1];
while( w < W ){
Ah[w] = minmax[index];
minmax[index] += incrdecr[index];
index = 1 - index;
Ah_plus[w] = minmax[index];
minmax[index] += incrdecr[index];
w++;
}
h += 2;
}
if( h + 1 == H ){
w = 0;
index = 0;
int ( &Ah )[bound] = A[h];
int W_minus = W - 1;
int W_half = ( W + 1 ) / 2;
while( w < W_half ){
Ah[w] = minmax[index];
minmax[index] += incrdecr[index];
index = 1 - index;
Ah[W_minus - w] = minmax[index];
minmax[index] += incrdecr[index];
w++;
}
}
cout << "Yes\n";
h = 0;
w = 0;
if( transpose ){
swap( H , W );
while( h < H ){
cout << A[0][h];
w = 1;
while( w < W ){
cout << " " << A[w][h];
w++;
}
cout << "\n";
h++;
}
} else {
while( h < H ){
int ( &Ah )[bound] = A[h];
cout << Ah[0];
w = 1;
while( w < W ){
cout << " " << Ah[w];
w++;
}
cout << "\n";
h++;
}
}
QUIT;
}