Submission #623537

#TimeUsernameProblemLanguageResultExecution timeMemory
623537inksamuraiJetpack (COCI16_jetpack)C++17
80 / 80
57 ms27356 KiB
#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 timeMemoryGrader output
Fetching results...