Submission #1326867

#TimeUsernameProblemLanguageResultExecution timeMemory
1326867Faisal_SaqibJump (BOI06_jump)C++20
90 / 100
6 ms960 KiB
#include <iostream> #include <algorithm> #include <vector> using namespace std; typedef long long ll; const int N=102; const ll base=1e18; struct bigint { vector<ll> tp; bigint(ll x) { while(x) { tp.push_back(x%base); x/=base; } } bigint() { } }; void print(bigint a) { if(a.tp.size()==0) a.tp.push_back(0); int sa=a.tp.size(); // cout<<"Hola "<<a.tp.size()<<endl; for(int i=sa-1;i>=0;i--) { cout<<a.tp[i]; } cout<<endl; } bigint add(bigint a,bigint b) { bigint c; int sa=a.tp.size(); int sb=b.tp.size(); ll cry=0; for(int i=0;i<=max(sb,sa);i++) { ll cc=cry; if(i<sa)cc+=a.tp[i]; if(i<sb)cc+=b.tp[i]; c.tp.push_back(cc%base); cry=cc/base; } while(c.tp.size()>0 and c.tp.back()==0)c.tp.pop_back(); if(c.tp.size()==0)c.tp.push_back(0); return c; } bigint dp[N][N]; int g[N][N]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>g[i][j]; } } dp[n][n]=1; for(int i=n;i>=1;i--) { for(int j=n;j>=1;j--) { if(g[i][j]==0)continue; if(j+g[i][j]<=n) dp[i][j]=add(dp[i][j],dp[i][j+g[i][j]]); if(i+g[i][j]<=n) dp[i][j]=add(dp[i][j],dp[i+g[i][j]][j]); } } print(dp[1][1]); }
#Verdict Execution timeMemoryGrader output
Fetching results...