結果
問題 | No.1988 Divisor Tiling |
ユーザー |
![]() |
提出日時 | 2022-07-29 10:35:45 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 18 ms / 2,000 ms |
コード長 | 1,456 bytes |
コンパイル時間 | 4,467 ms |
コンパイル使用メモリ | 254,828 KB |
最終ジャッジ日時 | 2025-01-30 14:46:57 |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 32 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/all>using namespace atcoder;using mint = modint998244353;using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf 1000000001void go0();void go1();int N,H;vector<int> y;vector<vector<int>> ans;void go0(){if(y.size()==0)return;int f = 0;int f2 = 0;rep(i,ans.size()){if(ans[i].size()!=N/H){f = i;f2 = ans[i].size();break;}}int h = H-f;rep(i,y.size()){if(y[i]%h==0){rep(j,y[i]/h){for(int k=f;k<ans.size();k++){ans[k].push_back(y[i]);// += y[i];}}y.erase(y.begin()+i);i--;continue;}}go1();}void go1(){if(y.size()==0)return;int f = 0;int f2 = 0;rep(i,ans.size()){if(ans[i].size()!=N/H){f = i;f2 = ans[i].size();break;}}int h = (N/H)-ans[f].size();rep(i,y.size()){if(y[i]%h==0){rep(j,y[i]/h){rep(k,h){ans[f].push_back(y[i]);}f++;}y.erase(y.begin()+i);i--;continue;}}go0();}int main() {cin>>N>>H;bool F = false;if(H<(N/H)){F = true;H = N/H;}for(int i=1;i<N;i++){if(N%i==0)y.push_back(i);}ans.resize(H);go0();if(F){vector<vector<int>> ra(N/H);rep(i,ans.size()){rep(j,ans[i].size()){ra[j].push_back(ans[i][j]);}}swap(ra,ans);}rep(i,ans.size()){rep(j,ans[i].size()){if(j!=0)cout<<' ';cout<<ans[i][j];}cout<<endl;}return 0;}