Submission #404341

# Submission time Handle Problem Language Result Execution time Memory
404341 2021-05-14T08:30:01 Z AmineWeslati Cigle (COI21_cigle) C++14
48 / 100
1000 ms 491584 KB
//Never stop trying
#include "bits/stdc++.h"
using namespace std;
#define boost ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0)

typedef long long ll;
typedef string str;
typedef long double ld;
typedef pair<int, int> pi;
#define fi first
#define se second
typedef vector<int> vi;
typedef vector<pi> vpi;
#define pb push_back
#define eb emplace_back
#define sz(x) (int)x.size()
#define all(x) begin(x), end(x)
#define rall(x) rbegin(x), rend(x)
#define endl "\n"
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)

const int MOD = 1e9 + 7; //998244353
const ll INF = 1e9;
const int nx[4] = {0, 0, 1, -1}, ny[4] = {1, -1, 0, 0}; //right left down up

template<class T> using V = vector<T>;
template<class T> bool ckmin(T& a, const T& b) { return a > b ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
ll cdiv(ll a, ll b) { return a / b + ((a ^ b) > 0 && a % b); } // divide a by b rounded up
//constexpr int log2(int x) { return 31 - __builtin_clz(x); } // floor(log2(x))

mt19937 rng(chrono::system_clock::now().time_since_epoch().count());
//mt19937_64 rng(chrono::system_clock::now().time_since_epoch().count());
ll random(ll a, ll b){
    return a + rng() % (b - a + 1);
}
#ifndef LOCAL  
#define cerr if(false) cerr
#endif
#define dbg(x) cerr << #x << " : " << x << endl; 
#define dbgs(x,y) cerr << #x << " : " << x << " / " << #y << " : " << y << endl;
#define dbgv(v) cerr << #v << " : " << "[ "; for(auto it : v) cerr << it << ' '; cerr << ']' << endl;
#define here() cerr << "here" << endl;

void IO() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin); 
    freopen("output.txt", "w", stdout);
#endif
}
/////////////////////////ONLY CLEAN CODES ALLOWED/////////////////////////

const int MX=5e3+10;
int N; 

vector<vi>t(MX,vi(MX*4,0));

void upd(int idx, int i, int v, int pos=1, int l=0, int r=N-1){
	if(l==r){
		t[idx][pos]=v;
		return; 
	}

	int m=(l+r)/2;
	if(i<=m) upd(idx,i,v,pos*2,l,m);
	else upd(idx,i,v,pos*2+1,m+1,r);

	t[idx][pos]=max(t[idx][pos*2],t[idx][pos*2+1]);
}

int get(int idx, int l, int r, int pos=1, int tl=0, int tr=N-1){
	if(l>r) return 0;
	if(l==tl && r==tr) return t[idx][pos];

	int tm=(tl+tr)/2;
	return max( get(idx,l,min(r,tm),pos*2,tl,tm), 
		get(idx,max(l,tm+1),r,pos*2+1,tm+1,tr));
}

int main() {
    boost; IO();

    cin>>N;
    vi a(N);
    FOR(i,0,N) cin>>a[i];

    vector<vi>dp(N,vi(N,0));

    FOR(l,1,N){
    	int l2=l,cur=0,prev=0,v=0;
    	FOR(r,l,N){
    		cur+=a[r];

    		while(l2 && prev<cur-a[r]){
    			l2--;
    			prev+=a[l2];
    		}
    		if(l2 && prev==cur-a[r]){
    			if(prev) v++;
    			l2--; 
    			prev+=a[l2];
    		}

    		dp[l][r]=get(l-1,0,l2)+v;
    		if(l!=r) ckmax(dp[l][r],dp[l][r-1]);

    		upd(r,l,dp[l][r]);
    	}
    }

    int ans=0;
    FOR(i,0,N) ckmax(ans,dp[i][N-1]);
    cout << ans << endl;

    

    return 0;
}
//Change your approach 
# Verdict Execution time Memory Grader output
1 Correct 202 ms 393548 KB Output is correct
2 Correct 190 ms 393492 KB Output is correct
3 Correct 186 ms 393476 KB Output is correct
4 Correct 189 ms 393500 KB Output is correct
5 Correct 187 ms 393452 KB Output is correct
6 Correct 189 ms 393656 KB Output is correct
7 Correct 192 ms 393440 KB Output is correct
8 Correct 185 ms 393512 KB Output is correct
9 Correct 188 ms 393500 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 202 ms 393548 KB Output is correct
2 Correct 190 ms 393492 KB Output is correct
3 Correct 186 ms 393476 KB Output is correct
4 Correct 189 ms 393500 KB Output is correct
5 Correct 187 ms 393452 KB Output is correct
6 Correct 189 ms 393656 KB Output is correct
7 Correct 192 ms 393440 KB Output is correct
8 Correct 185 ms 393512 KB Output is correct
9 Correct 188 ms 393500 KB Output is correct
10 Correct 190 ms 393464 KB Output is correct
11 Correct 192 ms 393508 KB Output is correct
12 Correct 199 ms 393540 KB Output is correct
13 Correct 186 ms 393452 KB Output is correct
14 Correct 189 ms 393428 KB Output is correct
15 Correct 190 ms 393420 KB Output is correct
16 Correct 190 ms 393460 KB Output is correct
17 Correct 187 ms 393436 KB Output is correct
18 Correct 190 ms 393492 KB Output is correct
19 Correct 186 ms 393480 KB Output is correct
20 Correct 188 ms 393520 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 215 ms 394516 KB Output is correct
2 Correct 209 ms 394464 KB Output is correct
3 Correct 211 ms 394468 KB Output is correct
4 Correct 210 ms 394648 KB Output is correct
5 Correct 209 ms 394564 KB Output is correct
6 Correct 208 ms 394444 KB Output is correct
7 Correct 210 ms 394432 KB Output is correct
8 Correct 212 ms 394612 KB Output is correct
9 Correct 213 ms 394544 KB Output is correct
10 Correct 212 ms 394552 KB Output is correct
11 Correct 211 ms 394564 KB Output is correct
12 Correct 210 ms 394396 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 202 ms 393548 KB Output is correct
2 Correct 190 ms 393492 KB Output is correct
3 Correct 186 ms 393476 KB Output is correct
4 Correct 189 ms 393500 KB Output is correct
5 Correct 187 ms 393452 KB Output is correct
6 Correct 189 ms 393656 KB Output is correct
7 Correct 192 ms 393440 KB Output is correct
8 Correct 185 ms 393512 KB Output is correct
9 Correct 188 ms 393500 KB Output is correct
10 Correct 190 ms 393464 KB Output is correct
11 Correct 192 ms 393508 KB Output is correct
12 Correct 199 ms 393540 KB Output is correct
13 Correct 186 ms 393452 KB Output is correct
14 Correct 189 ms 393428 KB Output is correct
15 Correct 190 ms 393420 KB Output is correct
16 Correct 190 ms 393460 KB Output is correct
17 Correct 187 ms 393436 KB Output is correct
18 Correct 190 ms 393492 KB Output is correct
19 Correct 186 ms 393480 KB Output is correct
20 Correct 188 ms 393520 KB Output is correct
21 Correct 215 ms 394516 KB Output is correct
22 Correct 209 ms 394464 KB Output is correct
23 Correct 211 ms 394468 KB Output is correct
24 Correct 210 ms 394648 KB Output is correct
25 Correct 209 ms 394564 KB Output is correct
26 Correct 208 ms 394444 KB Output is correct
27 Correct 210 ms 394432 KB Output is correct
28 Correct 212 ms 394612 KB Output is correct
29 Correct 213 ms 394544 KB Output is correct
30 Correct 212 ms 394552 KB Output is correct
31 Correct 211 ms 394564 KB Output is correct
32 Correct 210 ms 394396 KB Output is correct
33 Correct 212 ms 394556 KB Output is correct
34 Correct 212 ms 394524 KB Output is correct
35 Correct 212 ms 394432 KB Output is correct
36 Correct 213 ms 394428 KB Output is correct
37 Correct 220 ms 394496 KB Output is correct
38 Correct 241 ms 394436 KB Output is correct
39 Correct 212 ms 394436 KB Output is correct
40 Correct 209 ms 394512 KB Output is correct
41 Correct 210 ms 394524 KB Output is correct
42 Correct 229 ms 394440 KB Output is correct
43 Correct 210 ms 394428 KB Output is correct
44 Correct 211 ms 394404 KB Output is correct
45 Correct 224 ms 394484 KB Output is correct
46 Correct 211 ms 394524 KB Output is correct
47 Correct 209 ms 394424 KB Output is correct
48 Correct 211 ms 394496 KB Output is correct
49 Correct 222 ms 394568 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 202 ms 393548 KB Output is correct
2 Correct 190 ms 393492 KB Output is correct
3 Correct 186 ms 393476 KB Output is correct
4 Correct 189 ms 393500 KB Output is correct
5 Correct 187 ms 393452 KB Output is correct
6 Correct 189 ms 393656 KB Output is correct
7 Correct 192 ms 393440 KB Output is correct
8 Correct 185 ms 393512 KB Output is correct
9 Correct 188 ms 393500 KB Output is correct
10 Correct 190 ms 393464 KB Output is correct
11 Correct 192 ms 393508 KB Output is correct
12 Correct 199 ms 393540 KB Output is correct
13 Correct 186 ms 393452 KB Output is correct
14 Correct 189 ms 393428 KB Output is correct
15 Correct 190 ms 393420 KB Output is correct
16 Correct 190 ms 393460 KB Output is correct
17 Correct 187 ms 393436 KB Output is correct
18 Correct 190 ms 393492 KB Output is correct
19 Correct 186 ms 393480 KB Output is correct
20 Correct 188 ms 393520 KB Output is correct
21 Correct 215 ms 394516 KB Output is correct
22 Correct 209 ms 394464 KB Output is correct
23 Correct 211 ms 394468 KB Output is correct
24 Correct 210 ms 394648 KB Output is correct
25 Correct 209 ms 394564 KB Output is correct
26 Correct 208 ms 394444 KB Output is correct
27 Correct 210 ms 394432 KB Output is correct
28 Correct 212 ms 394612 KB Output is correct
29 Correct 213 ms 394544 KB Output is correct
30 Correct 212 ms 394552 KB Output is correct
31 Correct 211 ms 394564 KB Output is correct
32 Correct 210 ms 394396 KB Output is correct
33 Correct 212 ms 394556 KB Output is correct
34 Correct 212 ms 394524 KB Output is correct
35 Correct 212 ms 394432 KB Output is correct
36 Correct 213 ms 394428 KB Output is correct
37 Correct 220 ms 394496 KB Output is correct
38 Correct 241 ms 394436 KB Output is correct
39 Correct 212 ms 394436 KB Output is correct
40 Correct 209 ms 394512 KB Output is correct
41 Correct 210 ms 394524 KB Output is correct
42 Correct 229 ms 394440 KB Output is correct
43 Correct 210 ms 394428 KB Output is correct
44 Correct 211 ms 394404 KB Output is correct
45 Correct 224 ms 394484 KB Output is correct
46 Correct 211 ms 394524 KB Output is correct
47 Correct 209 ms 394424 KB Output is correct
48 Correct 211 ms 394496 KB Output is correct
49 Correct 222 ms 394568 KB Output is correct
50 Execution timed out 1123 ms 491584 KB Time limit exceeded
51 Halted 0 ms 0 KB -