結果
| 問題 |
No.307 最近色塗る問題多くない?
|
| コンテスト | |
| ユーザー |
🐬hec
|
| 提出日時 | 2015-11-28 00:00:49 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,348 bytes |
| コンパイル時間 | 1,497 ms |
| コンパイル使用メモリ | 167,276 KB |
| 実行使用メモリ | 10,752 KB |
| 最終ジャッジ日時 | 2024-09-14 00:17:38 |
| 合計ジャッジ時間 | 7,973 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 7 WA * 1 TLE * 1 -- * 27 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:21:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
21 | scanf("%d %d",&h,&w);
| ~~~~~^~~~~~~~~~~~~~~
main.cpp:22:31: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
22 | rep(i,h)rep(j,w) scanf("%d",a+w*i+j);
| ~~~~~^~~~~~~~~~~~~~
main.cpp:49:14: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
49 | scanf("%d",&q);
| ~~~~~^~~~~~~~~
main.cpp:52:22: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
52 | scanf("%d %d %d",&r,&c,&x);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h>
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
using namespace std;
const int vmax=50010;
int p[vmax];
void init(){rep(i,vmax) p[i]=i;}
int find(int x){return x==p[x]?x:p[x]=find(p[x]);}
void unite(int a,int b){a=find(a),b=find(b);p[b]=a;return;}
bool same(int a,int b){return find(a)==find(b);}
int h,w;
int a[vmax];
int di[4]={1,0,-1,0},dj[4]={0,1,0,-1};
set<int> neighbor[vmax];
int main(void){
init();
scanf("%d %d",&h,&w);
rep(i,h)rep(j,w) scanf("%d",a+w*i+j);
rep(i,h)rep(j,w){
int idx=w*i+j;
rep(k,4){
int ni=i,nj=j;
ni+=di[k],nj+=dj[k];
if(ni<0||h<=ni) continue;
if(nj<0||w<=nj) continue;
int nidx=w*ni+nj;
if(a[idx]==a[nidx]) unite(idx,nidx);
}
}
rep(i,h)rep(j,w){
int idx=find(w*i+j);
rep(k,4){
int ni=i,nj=j;
ni+=di[k],nj+=dj[k];
if(ni<0||h<=ni) continue;
if(nj<0||w<=nj) continue;
int nidx=find(w*ni+nj);
if(a[idx]!=a[nidx]) neighbor[idx].insert(nidx);
}
}
int q;
scanf("%d",&q);
rep(loop,q){
int r,c,x;
scanf("%d %d %d",&r,&c,&x);
r--,c--;
int idx=find(w*r+c);
if(a[idx]==x) continue;
a[idx]=x;
set<int> tmp;
for(auto &nidx:neighbor[idx]){
unite(idx,nidx);
for(auto &j:neighbor[nidx]) tmp.insert(j);
}
neighbor[idx]=tmp;
}
rep(i,h){
rep(j,w) printf("%s%d",(j?" ":""),a[find(w*i+j)]);
puts("");
}
return 0;
}
🐬hec