This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#define debug(x) cout << '[' << #x << " is: " << x << "] " << endl;
#define inF freopen("cardgame.in" , "r" , stdin);
#define outF freopen("cardgame.out" , "w" , stdout);
#define imod(a , n) (a % n + n ) % n
#define sor(v) sort(v.begin() , v.end());
#define print(v) for(auto f : v ) cout << f << " " ;
#define rsor(v) sort(v.rbegin() , v.rend());
#define rev(v) reverse(v.begin() , v.end());
#define scan(v)for(auto &it : v)cin >> it ;
#define ll long long
#define logar(x , y) log(x) / log(y)
#define __sum(n) n * (n + 1) / 2
#define __lcm(a , b) a / __gcd(a , b) * b
#define pii pair<int , int >
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);
//#define int ll
const int N = 202 , M = N * 4 , MX = 2e4 + 40;
const ll MOD = 998244353 , oo = 1e9 + 9 , OO = 1e18 , mod = MOD ;
const double pi = acos(-1) , eps = 1e-17 ;
int di[] = {1 , -1 , 0 , 0};
int dj[] = {0 , 0 , 1 , -1};
int n , l ;
int x[N] , t[N];
int dp[N][N][N][3];
int calc(int i , int j , int tim , int now){
// cout << i << " " << j << " " << tim << " " << now << endl ;
if(tim > 200)return 0 ;
if(i > j)return 0 ;
int &ret = dp[i][j][tim][now];
if(~ret)
return ret ;
if(now == 0){
ret = calc(i , j - 1 , tim + x[j + 1] - x[j] , 0) + (tim + x[j + 1] - x[j] <= t[j]);
ret = max(ret , calc(i + 1 , j , tim + l - x[j + 1] + x[i] , 2) + (tim + l - x[j + 1] + x[i] <= t[i]));
}
else if(now == 1){
ret = calc(i + 1 , j ,x[i] , 2) + (x[i] <= t[i]);
ret = max(ret , calc(i , j - 1 , l - x[j] , 0) + (l - x[j] <= t[j]));
}
else {
ret = calc(i + 1 , j , tim + x[i] - x[i - 1] , 2) + (tim + x[i] - x[i - 1] <= t[i]);
ret = max(ret , calc(i , j - 1 , tim + x[i - 1] + l - x[j] , 0) + (tim + x[i - 1] + l - x[j] <= t[j]));
}
return ret ;
}
int32_t main()
{
// inF;
// inF;outF;
fastio;
//Welcome back without <TAWJIHI>
cin >> n >> l ;
memset(dp , -1 , sizeof dp);
for(int i = 0 ; i < n ; i ++)cin >> x[i];
for(int i = 0 ; i < n ; i ++)cin >> t[i];
cout << calc(0 , n - 1 , 0 , 1);
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |