Submission #73942

# Submission time Handle Problem Language Result Execution time Memory
73942 2018-08-29T10:06:53 Z duckmoon99 Homecoming (BOI18_homecoming) C++14
0 / 100
1000 ms 49272 KB
#include "homecoming.h"
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
using namespace __gnu_pbds;

#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define fbo find_by_order
#define ook order_of_key
#define INF 1e18
#define ret return

typedef long long ll;
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector < pair<int, int> > vii;
typedef long double ld;
typedef tree<pair<int,int>, null_type, less<pair<int,int> >, rb_tree_tag, tree_order_statistics_node_update> pbds;
typedef set<int>::iterator sit;
typedef map<int,int>::iterator mit;
typedef vector<int>::iterator vit;

ll solve(int n, int k, int *A, int *B){
	ll tA = 0;
	ll tB = 0;
	for(int i = 0; i < n; i++){
		tA+=A[i];
		tB+=B[i];
	}
	ll anss = max(ll(0),tA-tB);
	if(k==1){
		ll ans = 0;
		for(int i = 0; i < n; i++){
			ans+=max(0,A[i]-B[i]);
		}
		ret ans;
	}
	int N = n;
	for(int T = 0; T < N; T++){
		//cout << "**" << T << endl;
		//banning the t-th book
		vi a, b;
		a.pb(0);
		b.pb(0);
		for(int i = 1; i < N; i++){
			a.pb(A[(i+T)%N]);
			b.pb(B[(i+T)%N]);
		}
		n=a.size();
		ll dp[n][k+5];
		ll cost[n];
		cost[0]=b[0];
		for(int i = 1; i < n; i++){
			cost[i]=b[i]+cost[i-1];
		}
		for(int i = n-1; i+k-1>=n; i--){
			for(int j = k; j >= 0; j--){
				if(i+j-1>n-1){
					dp[i][j]=-INF;
				}
				else{
					ll t=cost[i+j-1]-cost[i-1];
					dp[i][j]=-t;
					dp[i][j]=max(dp[i][j+1],-t);
				}
				//cout << i << " " << j << " " << dp[i][j] << endl;
			}
		}
		for(int i = n-k; i >= 1; i--){
			for(int j = k; j >= 0; j--){
				if(j==k){
					dp[i][j]=a[i]-b[i]+dp[i+1][j-1];
				}
				else{
					ll t=cost[i+j-1]-cost[i-1];
					dp[i][j]=-t;
					dp[i][j]=max(dp[i][j+1],-t+dp[i+j][0]);
				}
				//cout << i << " " << j << " " << dp[i][j] << endl;
				//if(j==k)cout << A[i] << " " << B[i] << endl;
			}
		}
		anss=max(anss,dp[1][0]);
	}
	ret anss;
}
# Verdict Execution time Memory Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 300 ms 2148 KB Output is correct
3 Correct 2 ms 2148 KB Output is correct
4 Correct 104 ms 2148 KB Output is correct
5 Incorrect 21 ms 2148 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 300 ms 2148 KB Output is correct
3 Correct 2 ms 2148 KB Output is correct
4 Correct 104 ms 2148 KB Output is correct
5 Incorrect 21 ms 2148 KB Output isn't correct
# Verdict Execution time Memory Grader output
1 Execution timed out 1068 ms 49272 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 376 KB Output is correct
2 Correct 300 ms 2148 KB Output is correct
3 Correct 2 ms 2148 KB Output is correct
4 Correct 104 ms 2148 KB Output is correct
5 Incorrect 21 ms 2148 KB Output isn't correct