結果
問題 | No.1988 Divisor Tiling |
ユーザー |
![]() |
提出日時 | 2022-06-26 10:50:48 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 14 ms / 2,000 ms |
コード長 | 3,125 bytes |
コンパイル時間 | 1,484 ms |
コンパイル使用メモリ | 134,976 KB |
最終ジャッジ日時 | 2025-01-30 00:52:25 |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 |
ソースコード
#include <algorithm>#include <array>#include <bitset>#include <cassert>#include <ciso646>#include <cmath>#include <complex>#include <cstdio>#include <functional>#include <iomanip>#include <iostream>#include <map>#include <queue>#include <random>#include <set>#include <stack>#include <string>#include <tuple>#include <unordered_map>#include <utility>#include <vector>using namespace std;typedef long long ll;const ll mod = 1000000007;const ll INF = (ll)1000000007 * 1000000007;typedef pair<int, int> P;#define rep(i, n) for (int i = 0; i < n; i++)#define per(i, n) for (int i = n - 1; i >= 0; i--)#define Rep(i, sta, n) for (int i = sta; i < n; i++)#define Per(i, sta, n) for (int i = n - 1; i >= sta; i--)typedef long double ld;const ld eps = 1e-8;const ld pi = acos(-1.0);typedef pair<ll, ll> LP;int dx[8] = {1, -1, 0, 0, 1, 1, -1, -1};int dy[8] = {0, 0, 1, -1, 1, -1, 1, -1};template <class T>using max_heap = priority_queue<T>;template <class T>using min_heap = priority_queue<T, vector<T>, greater<>>;template <class T>bool chmax(T &a, const T &b) {if (a < b) {a = b;return 1;}return 0;}template <class T>bool chmin(T &a, const T &b) {if (b < a) {a = b;return 1;}return 0;}int n, h;void solve() {cin >> n >> h;int w = n / h;vector<vector<int>> v(h, vector<int>(w));int a = 1, b = 1;while (h % 2 == 0) {h /= 2;a *= 2;}while (w % 2 == 0) {w /= 2;b *= 2;}bool f = false;if (a > b) {swap(a, b);f = true;}vector<vector<int>> v2(a, vector<int>(b));int pos = 0;for (int d = a; d < a * b; d *= 2) {rep(i, a) rep(j, d / a) { v2[i][pos + j] = d; }pos += d / a;}pos = 1;for (int d = 1; d < a; d *= 2) {rep(i, d) v2[pos + i][b - 1] = d;pos += d;}// cout << a << " " << b << " " << f << endl;if (f) {vector<vector<int>> v3(b, vector<int>(a));rep(i, b) rep(j, a) v3[i][j] = v2[j][i];v2 = v3;swap(a, b);}// cout << a << " " << b << endl;// cout << h << " " << w << endl;// rep(i, a) {// rep(j, b) cout << v2[i][j] << " ";// cout << "" << endl;// }rep(i, a) {rep(j, b) {// cout << v2[i][j] << " ";if (h > 1) {if (v2[i][j] == 0) {int x = 1;Rep(k, 1, h + 1) {v[i * h + k - 1][j] = x;if (x * 2 == k + 1) x *= 2;}} elserep(k, h) { v[i * h + k][j] = v2[i][j] * h; }} else {if (v2[i][j] == 0) {int x = 1;Rep(k, 1, w + 1) {v[i][j * w + k - 1] = x;if (x * 2 == k + 1) x *= 2;}} elserep(k, w) { v[i][j * w + k] = v2[i][j] * w; }}// rep(i, h * a) {// rep(j, w * b) { cout << v[i][j] << " "; }// cout << "" << endl;// }}// cout << "" << endl;}for (auto v_ : v) {for (int t : v_) cout << t << " ";cout << "" << endl;}}int main() {ios::sync_with_stdio(false);cin.tie(0);cout << fixed << setprecision(50);solve();}