Submission #623450

# Submission time Handle Problem Language Result Execution time Memory
623450 2022-08-05T15:44:33 Z inksamurai Jetpack (COCI16_jetpack) C++17
40 / 80
20 ms 14272 KB
#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=1e9;

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(_,11){
			x+=di[0],y+=dj[0];
			if(ok(x,y) and a[x][y]=='.'){
				int nval=self(self,x,y);
				// if(sx==h-1 and sy==0){
				// 	print("ho",nval,x,y);
				// }
				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);
			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);
	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 time Memory Grader output
1 Correct 1 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 1 ms 468 KB Output is correct
5 Correct 5 ms 1492 KB Output is correct
6 Incorrect 2 ms 1108 KB Unexpected end of file - int32 expected
7 Incorrect 5 ms 3028 KB Unexpected end of file - int32 expected
8 Incorrect 11 ms 6996 KB Unexpected end of file - int32 expected
9 Incorrect 15 ms 10324 KB Unexpected end of file - int32 expected
10 Incorrect 20 ms 14272 KB Unexpected end of file - int32 expected