# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
297327 | kshitij_sodani | Vision Program (IOI19_vision) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
//nowruz backup
#include <bits/stdc++.h>
using namespace std;
typedef long long llo;
#define a first
#define b second
#define pb push_back
int it[1100][1100];
char ans[1100][1100];
int deg[1100][1100];
mt19937 rng;
vector<int> x={1,-1,0,0};
vector<int> y={0,0,1,-1};
int n,m,k;
void push(pair<int,int> no){
for(int i=0;i<4;i++){
int xo=x[i]+no.a;
int yy=y[i]+no.b;
if(xo<0 or yy<0 or xo>=n or yy>=m){
continue;
}
if(it[xo][yy]==0){
continue;
}
deg[xo][yy]+=1;
}
}
int cur;
void solve(){
rng=mt19937(chrono::steady_clock::now().time_since_epoch().count());
cin>>n>>m>>k;
vector<pair<int,int>> xx;
pair<int,int> st={-1,-1};
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
char s;
cin>>s;
if(s=='#'){
it[i][j]=0;
}
else{
it[i][j]=1;
xx.pb({i,j});
/* if(cur==9 and st.a!=-1){
continue;
}*/
st={i,j};
}
}
}
int ma=-1;
for(int ii=0;ii<10;ii++){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
deg[i][j]=0;
}
}
shuffle(xx.begin(),xx.end(),rng);
//if(cur==9){
st=xx[0];
//}
//=xx[0];
queue<pair<int,int>> ss;
ss.push(st);
push(st);
vector<pair<int,int>> tt;
tt.pb(st);
while(ss.size()){
pair<int,int> no=ss.front();
ss.pop();
tt.pb(no);
vector<int> st={0,1,2,3};
//shuffle(st.begin(),st.end(),rng);
for(auto i:st){
int xo=x[i]+no.a;
int yy=y[i]+no.b;
if(xo<0 or yy<0 or xo>=n or yy>=m){
continue;
}
if(it[xo][yy]==0){
continue;
}
if(deg[xo][yy]==1){
push({xo,yy});
ss.push({xo,yy});
}
}
}
//continue;
int co=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(deg[i][j]==1){
co+=1;
}
}
}
if(co>ma){
ma=co;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(it[i][j]==0){
ans[i][j]='#';
}
else{
ans[i][j]='X';
}
}
}
//cout<<tt.size()<<endl;
for(auto i:tt){
ans[i.a][i.b]='.';
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cout<<ans[i][j];
}
cout<<endl;
}
/* for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(i==m-1){
cout<<".";
continue;
}
if(j==m-1){
cout<<"X";
continue;
}
if(j%3==1){
cout<<".";
continue;
}
else{
if((j/3)%2==0){
if(i<m-3 and i%2==0){
cout<<".";
continue;
}
}
else{
if(i<m-3 and i%2==1){
cout<<".";
continue;
}
}
}
cout<<"X";
continue;
if(j%4==1){
cout<<".";
continue;
}
else if(j%4==0 or j%4==2){
if((m-i)%2==1){
cout<<".";
continue;
}
}
else{
if(i==m-1 or i==m-2){
cout<<".";
continue;
}
}
// else{
cout<<"X";
// }
}
cout<<endl;
}
*/
}
int main(){
for(int i=1;i<=10;i++){
if( i==2 or i==4){
continue;
}
cur=i;
freopen(("nowruz"+to_string(i)+".in.txt").c_str(),"r",stdin);
freopen(("nowruz"+to_string(i)+".out"+".txt").c_str(),"w",stdout);
solve();
}
return 0;
}