이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include<bits/stdc++.h>
#pragma GCC optimize("unroll-loops,no-stack-protector,Ofast")
using namespace std;
typedef int ll;
typedef pair<ll,ll> pll;
#define X first
#define Y second
#define mp make_pair
#define REP(i,n) for(int i=0;i<n;i++)
const ll N=4e3;
string grid,s;
bitset<N*N> vis;
queue<ll> que;
vector<ll> nxt;
ll n,m,ans;
inline ll get(ll r,ll c){
return r*m+c;
}
inline ll dest(ll now,ll dir){
if(dir==0)return (now/m==0?-1:now-m);
if(dir==1)return (now%m==0?-1:now-1);
if(dir==2)return (now/m==n-1?-1:now+m);
if(dir==3)return (now%m==m-1?-1:now+1);
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
REP(i,n){
cin>>s;
grid=grid+s;
}
que.push(get(0,0));vis[get(0,0)]=1;
que.push(get(n-1,m-1));vis[get(n-1,m-1)]=1;
for(char i=grid[get(0,0)];;i=(i=='F'?'R':'F')){
nxt.clear();
++ans;
assert(ans<=n*m);
while(!(que.empty())){
ll nd=que.front();que.pop();
for(int j=0;j<4;j++){
ll to=dest(nd,j);
if(to==-1||vis[to])continue;
if(grid[to]==i){
vis[to]=1;
que.push(to);
}else if(grid[to]!='.'){
nxt.emplace_back(to);
}
}
}
if((ll)nxt.size()==0)break;
for(ll j:nxt)que.push(j);
}
cout<<ans<<"\n";
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
tracks.cpp: In function 'll dest(ll, ll)':
tracks.cpp:27:1: warning: control reaches end of non-void function [-Wreturn-type]
27 | }
| ^
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |