Submission #1235949

#TimeUsernameProblemLanguageResultExecution timeMemory
1235949stanirinaCarnival Tickets (IOI20_tickets)C++20
11 / 100
11 ms18504 KiB
#include <bits/stdc++.h>
#include "tickets.h"
#define int long long


using namespace std;
/*
void allocate_tickets(vector<vector<int32_t>> ans){
    int n=ans.size();
    int m=ans[0].size();
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++)cout<<ans[i][j]<<' ';
        cout<<endl;
    }
}
*/
long long find_maximum(int32_t k, vector<std::vector<int32_t>> x) {
	int n = x.size();
	int m = x[0].size();

	vector<int> maksimum(n,-1);
	vector<int> minimum(n,10000000000000ll);
	vector<int> pmin(n,-1ll);
	vector<int> pmax(n,-1ll);
	for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            minimum[i]=min(minimum[i],(int)x[i][j]);
            maksimum[i]=max(maksimum[i],(int)x[i][j]);
            if(minimum[i]==x[i][j])pmin[i]=j;
            if(maksimum[i]==x[i][j])pmax[i]=j;
        }
	}

	vector<vector<int>> dp(n+1);
	for(int i=0;i<n+1;i++)dp[i].assign(n/2+1,0ll);
	vector<vector<int>> potez(n+1);
	for(int i=0;i<n+1;i++)potez[i].assign(n/2+1,0ll);
	for(int j=1;j<n+1;j++){
        dp[j][0]=dp[j-1][0]-minimum[j-1];
	}
	for(int i=1;i<n+1;i++){
        for(int j=1;j<n/2+1;j++){
            dp[i][j]=max(dp[i-1][j-1]+maksimum[i-1],dp[i-1][j]-minimum[i-1]);
            if(dp[i][j]==dp[i-1][j-1]+maksimum[i-1])potez[i][j]=1;
        }
	}
	//for(int i=0;i<n/2+1;i++){
     //   for(int j=0;j<n+1;j++)cout<<dp[j][i]<<' ';
      //  cout<<endl;
	//}
	vector<vector<int32_t>> ans(n);
	for(int i=0;i<n;i++)ans[i].assign(m,-1);
	int red=n/2-1;
	for(int i=n;i>0;i--){
        if(potez[i][red]==1)ans[i-1][pmax[i-1]]=0;
        else ans[i-1][pmin[i-1]]=0;
        red-=potez[i][red];
	}

	allocate_tickets(ans);
	return dp[n][n/2];
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...