# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
623537 | inksamurai | Jetpack (COCI16_jetpack) | C++17 | 57 ms | 27356 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for(int i=0;i<n;i++)
#define per(i,n) for(int i=n-1;i>=0;i--)
#define rng(i,c,n) for(int i=c;i<n;i++)
#define fi first
#define se second
#define pb push_back
#define sz(a) (int)a.size()
#define vec(...) vector<__VA_ARGS__>
#define _3SgiE60 ios::sync_with_stdio(0),cin.tie(0)
typedef long long ll;
using pii=pair<int,int>;
using vi=vector<int>;
void print(){cout<<'\n';}
template<class h,class...t>
void print(const h&v,const t&...u){cout<<v<<' ',print(u...);}
// e
const int inf=100010;
signed main(){
_3SgiE60;
const int h=10;
int w;
cin>>w;
vec(vec(char)) a(h,vec(char)(w));
rep(i,h){
rep(j,w){
cin>>a[i][j];
}
}
auto ok=[&](int x,int y){
return min(x,y)>=0 and x<h and y<w;
};
const int di[]={-1,1};
const int dj[]={1,1};
using T=pair<int,pii>;
vec(vec(T)) dp(h,vec(T)(w));
rep(i,h){
rep(j,w){
dp[i][j]={inf,{-1,-1}};
}
}
auto affine=[&](int sx,int sy,int val,int x,int y,int ad)->void{
val+=ad;
if(dp[sx][sy].fi>val){
dp[sx][sy].fi=val;
dp[sx][sy].se={x,y};
}
};
auto dfs=[&](auto self,int x,int y)->int{
assert(a[x][y]=='.');
if(dp[x][y].fi!=inf) return dp[x][y].fi;
if(y==w-1) return dp[x][y].fi=0;
dp[x][y].fi=inf-1;
int sx=x,sy=y;
rep(_,10){
x+=di[0],y+=dj[0];
x=max(x,0);
if(ok(x,y) and a[x][y]=='.'){
int nval=self(self,x,y);
if(nval<=w){
affine(sx,sy,nval,x,y,1);
}
}else{
break;
}
}
x=sx,y=sy;
x+=di[1],y+=dj[1];
x=min(x,h-1);
if(ok(x,y) and a[x][y]=='.'){
int nval=self(self,x,y);
if(nval<=w){
affine(sx,sy,nval,x,y,0);
}
}
return dp[sx][sy].fi;
};
dfs(dfs,h-1,0);
int x=h-1,y=0;
vec(pii) pns;
while(y<w-1){
int nx,ny;
nx=dp[x][y].se.fi,ny=dp[x][y].se.se;
if(nx<x or (nx==0 and x==0)){
pns.pb(pii(y,ny-y));
}
x=nx,y=ny;
}
print(sz(pns));
for(auto p:pns){
print(p.fi,p.se);
}
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |