結果
| 問題 |
No.918 LISGRID
|
| ユーザー |
snow39
|
| 提出日時 | 2019-10-26 13:10:53 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 49 ms / 2,000 ms |
| コード長 | 1,374 bytes |
| コンパイル時間 | 1,225 ms |
| コンパイル使用メモリ | 102,944 KB |
| 実行使用メモリ | 13,228 KB |
| 最終ジャッジ日時 | 2024-09-14 06:25:40 |
| 合計ジャッジ時間 | 4,623 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 36 |
ソースコード
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <iomanip>
#include <set>
#include <tuple>
#define mkp make_pair
#define mkt make_tuple
#define rep(i,n) for(int i = 0; i < (n); ++i)
using namespace std;
typedef long long ll;
const ll MOD=1e9+7;
vector<int> g[401*401];
int ind[401*401];
int main(){
int H,W;
cin>>H>>W;
vector<int> A(H),B(W);
rep(i,H) cin>>A[i];
rep(i,W) cin>>B[i];
sort(A.begin(),A.end());
sort(B.begin(),B.end());
for(int i=0;i<H;i++){
for(int j=0;j<A[i]-1;j++){
g[i*W+j].push_back(i*W+j+1);
ind[i*W+j+1]++;
}
for(int j=A[i];j<W;j++){
g[i*W+j].push_back(i*W+j-1);
ind[i*W+j-1]++;
}
}
for(int i=0;i<W;i++){
for(int j=0;j<B[i]-1;j++){
g[j*W+i].push_back((j+1)*W+i);
ind[(j+1)*W+i]++;
}
for(int j=B[i];j<H;j++){
g[j*W+i].push_back((j-1)*W+i);
ind[(j-1)*W+i]++;
}
}
queue<int> Q;
for(int i=0;i<W*H;i++){
if(ind[i]==0) Q.push(i);
}
int val=1;
vector<int> ans(H*W,0);
while(!Q.empty()){
int tp=Q.front();
Q.pop();
ans[tp]=val++;
for(auto nex:g[tp]){
ind[nex]--;
if(ind[nex]==0) Q.push(nex);
}
}
for(int i=0;i<H;i++){
for(int j=0;j<W;j++){
cout<<ans[i*W+j]<<" ";
}
cout<<endl;
}
return 0;
}
snow39