Submission #1195884

#TimeUsernameProblemLanguageResultExecution timeMemory
1195884developinpopPortals (BOI14_portals)C++17
0 / 100
0 ms328 KiB
/*
_____________________.
|____________________|   $$\                                                            $$\           $$\        $$\               
|____________________|   $$ |                                                           \__|          $$ |       $$ |              
|____________________| $$$$$$\    $$$$$$\  $$$$$$\  $$$$$$$\   $$$$$$$\        $$$$$$\  $$\  $$$$$$\  $$$$$$$\ $$$$$$\    $$$$$$$\ 
|____________________| \_$$  _|  $$  __$$\ \____$$\ $$  __$$\ $$  _____|      $$  __$$\ $$ |$$  __$$\ $$  __$$\\_$$  _|  $$  _____|
|____________________|   $$ |    $$ |  \__|$$$$$$$ |$$ |  $$ |\$$$$$$\        $$ |  \__|$$ |$$ /  $$ |$$ |  $$ | $$ |    \$$$$$$\  
                         $$ |$$\ $$ |     $$  __$$ |$$ |  $$ | \____$$\       $$ |      $$ |$$ |  $$ |$$ |  $$ | $$ |$$\  \____$$\ 
                         \$$$$  |$$ |     \$$$$$$$ |$$ |  $$ |$$$$$$$  |      $$ |      $$ |\$$$$$$$ |$$ |  $$ | \$$$$  |$$$$$$$  |
            へ   ♡        \____/ \__|      \_______|\__|  \__|\_______/       \__|      \__| \____$$ |\__|  \__|  \____/ \_______/ 
         ૮ - ՛)                                                                             $$\   $$ |    
         / ⁻ ៸|                                                                              \$$$$$$  |   are human rights :3
     乀 (ˍ,ل ل                       													     \______/ 

*/

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, 
                         tree_order_statistics_node_update>;
template <typename T>
using ordered_multiset = tree<pair<T, long long>, null_type, 
                      less<pair<T, long long>>, rb_tree_tag, 
                         tree_order_statistics_node_update>;

#define ll long long
#define ld long double
#define inf (ll)1e18
#define pb push_back
#define se second
#define fi first
#define endl '\n'
#define mp make_pair
#define pll pair<ll,ll>
#define kth_smallest find_by_order
#define num_of_smaller order_of_key
#define fori(x) for(ll i=0;i<x;i++)
#define forj(y) for(ll j=0;j<y;j++)

//#define DEBUG

#ifdef DEBUG
#define show(x) cerr<<#x<<" is "<<x<<endl;
#define show2(x,y) cerr<<#x<<" is "<<x<<" "<<#y<<" is "<<y<<endl;
#define show3(x,y,z) cerr<<#x<<" is "<<x<<" "<<#y<<" is "<<y<<" "<<#z<<" is "<<z<<endl;
#define show4(x,y,z,a) cerr<<#x<<" is "<<x<<" "<<#y<<" is "<<y<<" "<<#z<<" is "<<z<<" "<<#a<<" is "<<a<<endl;
#define show_vec(a) for(auto &i:a)cerr<<i<<" ";cerr<<endl;
#define skillissue cerr<<"your code is running\n";
#define getchar_unlocked _getchar_nolock // comment before submission
#else
#define show(x)
#define show2(x,y)
#define show3(x,y,z)
#define show4(x,y,z,a)
#define show_vec(a)
#define skillissue
#endif

/*

inline int readint() {
    int x=0; char ch=getchar_unlocked(); bool s=1;
    while(ch<'0'||ch>'9'){if(ch=='-')s=0;ch=getchar_unlocked();}
    while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar_unlocked();}
    return s?x:-x;
}

*/

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	ll n,m;cin>>n>>m;
	pll to[n][m],bo[n][m],le[n][m],ri[n][m];
	char map[n][m];
	queue<pll> cur;
	pll en;
	fori(n){
		forj(m){
			cin>>map[i][j];
			if(map[i][j]=='S')cur.push(mp(i,j));
			else if(map[i][j]=='C')en=mp(i,j);
		}
	}
	fori(n){
		ll las=0;
		forj(m){
			if(map[i][j]=='#')las=j+1;
			to[i][j]=mp(i,las);
		}
	}
	fori(n){
		ll las=m-1;
		for(ll j=m-1;j>=0;j--){
			if(map[i][j]=='#')las=j-1;
			bo[i][j]=mp(i,las);
		}
	}
	fori(m){
		ll las=0;
		forj(n){
			if(map[j][i]=='#')las=j+1;
			le[j][i]=mp(las,i);
		}
	}
	fori(m){
		ll las=n-1;
		for(ll j=n-1;j>=0;j--){
			if(map[j][i]=='#')las=j-1;
			ri[j][i]=mp(las,i);
		}
	}
	/*
	fori(n){
		forj(m){
			cerr<<to[i][j].fi<<','<<to[i][j].se<<" ";
		}cerr<<endl;
	}
	*/
	ll cnt=0;
	queue<pll> temp,emp;
	map[cur.front().fi][cur.front().se]='#';
	while(cur.size()){
		show(cur.size())
		while(cur.size()){
			if(cur.front()==en){
				cout<<cnt;
				return 0;
			}
			ll x=cur.front().fi,y=cur.front().se;cur.pop();
			show2(x,y);
			for(ll i=-1;i<=1;i++){
				for(ll j=-1;j<=-1;j++){
					if((abs(i)==1 and j==0)or(abs(j)==1 and i==0)){
						ll X=x+i,Y=y+j;
						if(X<n and X>=0 and Y<m and Y>=0 and map[X][Y]!='#'){
							map[X][Y]='#';
							temp.push(mp(X,Y));
						}
					}
				}
			}
			pll things[4];things[0]=to[x][y];things[1]=bo[x][y];things[2]=le[x][y];things[3]=ri[x][y];
			for(auto k:things){
				ll X=k.fi,Y=k.se;
				if(X<n and X>=0 and Y<m and Y>=0 and map[X][Y]!='#'){
					map[X][Y]='#';
					temp.push(mp(X,Y));
				}
			}
		}
		cnt++;
		cur=temp;
		temp=emp;
	}
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...