Submission #1171682

#TimeUsernameProblemLanguageResultExecution timeMemory
1171682PedroBigManBodyguard (JOI21_bodyguard)C++20
0 / 100
1 ms580 KiB
/*
Author of all code: Pedro BIGMAN Dias
Last edit: 15/02/2021
*/
#include <iostream>
#include <vector>
#include <cmath>
#include <algorithm>
#include <string>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <deque>
#include <list>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
#include <cstring>
using namespace std;
typedef long long int ll;
typedef unsigned long long int ull;
typedef long double ld;
#define REP(i,a,b) for(ll i=(ll) a; i<(ll) b; i++)
#define pb push_back
#define mp make_pair
#define pl pair<ll,ll>
#define ff first
#define ss second
#define whole(x) x.begin(),x.end()
#define DEBUG(i) cout<<"Pedro Is The Master "<<i<<endl
#define INF 2000000000000000000LL
#define EPS 0.00000001
#define pi 3.14159
ll mod=1000000007LL;

template<class A=ll> 
void Out(vector<A> a) {REP(i,0,a.size()) {cout<<a[i]<<" ";} cout<<endl;}

template<class A=ll>
void In(vector<A> &a, ll N) {A cur; REP(i,0,N) {cin>>cur; a.pb(cur);}} 

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    ll N,Q; cin>>N>>Q;
	ll L = 10LL; ll T = 12LL;
	vector<ll> dp; REP(i,0,L) {dp.pb(0LL);}
	vector<ll> newdp; REP(i,0,L) {newdp.pb(0LL);}
	vector<vector<ll> > olddp; olddp.pb(dp);
	vector<pl> pro; REP(i,0,L) {pro.pb({0LL,0LL});}
	vector<ll> loc; REP(i,0,N) {loc.pb(-1LL);}
	vector<ll> A,B,st,C; REP(i,0,N) {A.pb(-1LL); B.pb(-1LL); st.pb(-1LL); C.pb(-1LL);}
	REP(i,0,N)
	{
		cin>>st[i]>>A[i]>>B[i]>>C[i];
		st[i]*=2LL; A[i]*=2LL; B[i]*=2LL; C[i]/=2LL;
	}
	REP(t,1,T)
	{
		REP(i,0,L)
		{
			newdp[i]=dp[i];
			if(i>0) {newdp[i]=max(newdp[i],dp[i-1]+pro[i-1].ss);}
			if(i<L-1) {newdp[i]=max(newdp[i],dp[i+1]+pro[i+1].ff);}
		}
		REP(i,0,L) {dp[i]=newdp[i];}
		REP(i,0,L) {pro[i]={0,0};}
		REP(i,0,N)
		{
			if(t<st[i] || t>st[i]+abs(B[i]-A[i])) {continue;}
			if(t==st[i]) {loc[i]=A[i]; continue;}
			if(t==st[i]+abs(B[i]-A[i])) {loc[i]=-1LL; continue;}
			if(A[i]>B[i]) {loc[i]--;} else {loc[i]++;}
		}
		REP(i,0,N)
		{
			if(loc[i]==-1LL) {continue;}
			if(A[i]>B[i]) {pro[loc[i]].ff=max(pro[loc[i]].ff,C[i]);}
			if(A[i]<B[i]) {pro[loc[i]].ss=max(pro[loc[i]].ss,C[i]);}
		}
		olddp.pb(dp);
	}
	REP(i,0,T) {Out(olddp[i]);}
    return 0;
}
#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...