結果
| 問題 |
No.2112 All 2x2 are Equal
|
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2022-10-05 23:14:48 |
| 言語 | C++17(gcc12) (gcc 12.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 78 ms / 2,000 ms |
| コード長 | 1,786 bytes |
| コンパイル時間 | 1,722 ms |
| コンパイル使用メモリ | 194,324 KB |
| 最終ジャッジ日時 | 2025-02-07 22:06:29 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 34 |
ソースコード
// ジャッジコードチェックその2
#include<bits/stdc++.h>
using namespace std;
#define UNTIE ios_base::sync_with_stdio( false ); cin.tie( nullptr )
#define CIN( LL , A ) LL A; cin >> A
#define QUIT return 0
int main()
{
UNTIE;
constexpr const int bound = 1000;
CIN( int , H );
assert( 2 <= H && H <= bound );
CIN( int , W );
assert( 2 <= W && W <= bound );
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 ";
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++;
}
h++;
if( h < H ){
cout << " ";
}
}
} else {
while( h < H ){
int ( &Ah )[bound] = A[h];
cout << Ah[0];
w = 1;
while( w < W ){
cout << " " << Ah[w];
w++;
}
h++;
if( h < H ){
cout << " ";
}
}
}
QUIT;
}