제출 #623526

#제출 시각아이디문제언어결과실행 시간메모리
623526inksamuraiJetpack (COCI16_jetpack)C++17
0 / 80
1100 ms2644 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}; auto reachable=[&](auto self,int x,int y)->bool{ if(y==w-1) return true; int nx=x+di[0],ny=y+dj[0]; bool pok=0; if(ok(nx,ny) and a[nx][ny]=='.'){ pok=pok or self(self,nx,ny); } nx=x+di[1],ny=y+dj[1]; nx=min(nx,h-1); if(ok(nx,ny) and a[nx][ny]=='.'){ pok=pok or self(self,nx,ny); } return pok; }; assert(reachable(reachable,h-1,0)); // 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(_,11){ // x+=di[0],y+=dj[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; // assert(dp[x][y].fi<inf-1); // cout<<dp[x][y].fi<<"\n"; // while(y<w-1){ // // print(x,y); // int nx,ny; // nx=dp[x][y].se.fi,ny=dp[x][y].se.se; // if(nx==-1 and ny==-1) break; // if(nx<x){ // cout<<y<<" "<<ny-y<<"\n"; // } // x=nx,y=ny; // } }
#Verdict Execution timeMemoryGrader output
Fetching results...