Submission #1286596

#TimeUsernameProblemLanguageResultExecution timeMemory
1286596WH8Collecting Stamps 3 (JOI20_ho_t3)C++20
100 / 100
109 ms133324 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pll pair<int, int> #define mp make_pair #define pb push_back #define f first #define s second #define endl '\n' #define ld long double #define sz(x) static_cast<int>((x).size()) void chmin(int & x, int v) { x=min(x, v); } signed main(){ int n,m;cin>>n>>m; vector<int> x(n+4,0), t(n+4,0); for(int i=2;i<=n+1;i++)cin>>x[i]; for(int i=2;i<=n+1;i++)cin>>t[i]; int mem[n+4][n+4][n+4][2]; for(int i=0;i<n+4;i++) for(int j=0;j<n+4;j++) for(int k=0;k<n+4;k++) mem[i][j][k][0]=mem[i][j][k][1]=1e15; mem[1][1][n+2][0]=mem[1][1][n+2][1]=0; auto dist=[&](int a, int b)->int{ return min(m-abs(x[a]-x[b]), abs(x[a]-x[b])); }; int ans=0; for(int i=1;i<=n+1;i++){ for(int j=1;j<=n+2;j++){ for(int k=n+2;k>j;k--){ // right to right if(mem[i-1][j][k+1][1]+dist(k+1, k) <= t[k]) chmin(mem[i][j][k][1], mem[i-1][j][k+1][1]+dist(k+1, k)); chmin(mem[i][j][k][1],mem[i][j][k+1][1]+dist(k+1, k)); //left to right if(mem[i-1][j][k+1][0]+dist(j, k)<=t[k]) chmin(mem[i][j][k][1], mem[i-1][j][k+1][0]+dist(j,k)); chmin(mem[i][j][k][1], mem[i][j][k+1][0]+dist(j, k)); // left to left if(mem[i-1][j-1][k][0]+dist(j-1, j) <= t[j]) chmin(mem[i][j][k][0], mem[i-1][j-1][k][0]+dist(j-1, j)); chmin(mem[i][j][k][0], mem[i][j-1][k][0]+dist(j-1, j)); // right to left if(mem[i-1][j-1][k][1]+dist(j, k)<=t[j]) chmin(mem[i][j][k][0], mem[i-1][j-1][k][1]+dist(j, k)); //~ if(i==3 and j==2 and k==4){ //~ printf("coming from %lld, dist %lld\n", mem[i-1][j-1][k][1], dist(j, k)); //~ } chmin(mem[i][j][k][0], mem[i][j-1][k][1]+dist(j, k)); chmin(mem[i][j][k][1], mem[i][j][k][0]+dist(j, k)); chmin(mem[i][j][k][0], mem[i][j][k][1]+dist(j, k)); if(mem[i][j][k][0] < 1e12 or mem[i][j][k][1] < 1e12) ans=i; //~ printf("i %lld, l(j) %lld, r(k) %lld, 0: %lld, 1: %lld\n", i,j,k,mem[i][j][k][0],mem[i][j][k][1]); } } } cout<<ans-1; } /* 3 5 1 2 3 1 2 3 4 10 1 2 8 9 5 6 2 1 6 10 1 2 3 4 5 1 2 3 4 5 6 87 9 23 44 62 67 78 15 91 53 91 89 46 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...