답안 #630657

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
630657 2022-08-16T20:25:09 Z CSQ31 메기 농장 (IOI22_fish) C++17
18 / 100
388 ms 87508 KB
#include "fish.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef pair<int,int> pii;
#define fi first
#define se second
#define sz(a) (int)(a.size())
//0 -> previous is lower
//1 -> previous is higher
const int MAXN = 111111;
vector<int>st[MAXN];
vector<pii>fish[MAXN];
vector<ll>dp[2][MAXN],pre[3][MAXN];
int cnt[MAXN];
const ll INF = -1e17;
long long max_weights(int n, int m, vector<int> X, vector<int> Y,vector<int> W) {
	for(int i=0;i<m;i++){
		X[i]++;
		Y[i]++;
		fish[X[i]].push_back({Y[i],i});
	}
	for(int i=0;i<=n;i++){
		vector<pii>f;
		st[i].push_back(0);
		if(i){
			for(auto x:fish[i-1]){
				st[i].push_back(x.fi);
				f.push_back(x);
			}
		}
		for(auto x:fish[i]){
			st[i].push_back(x.fi);
			f.push_back(x);
		}
		for(auto x:fish[i+1]){
			st[i].push_back(x.fi);
			f.push_back(x);
		}
		sort(st[i].begin(),st[i].end());
		sort(f.begin(),f.end());
		st[i].resize(unique(st[i].begin(),st[i].end()) - st[i].begin());
		cnt[i] = st[i].size();
		for(int k=0;k<3;k++)pre[k][i].assign(cnt[i],0);
		for(int k=0;k<2;k++)dp[k][i].assign(cnt[i],INF);
		int ptr = -1;
		for(int j=0;j<cnt[i];j++){
			while(ptr+1 < sz(f) && f[ptr+1].fi <= st[i][j]){
				ptr++;
				int id = f[ptr].se;
				if(Y[id] != st[i][j])continue;
				if(X[id] == i-1)pre[0][i][j]+=W[id];
				if(X[id] == i  )pre[1][i][j]+=W[id];
				if(X[id] == i+1)pre[2][i][j]+=W[id];
			}
		}
		for(int k=0;k<3;k++){
			for(int j=1;j<cnt[i];j++)pre[k][i][j]+=pre[k][i][j-1];
		}
	}
	dp[0][0][0] = 0;
	for(int i=1;i<=n;i++){
		ll mx = INF;
		int ptr = -1;
		for(int j=0;j<cnt[i];j++){
			while(ptr+1<cnt[i-1] && st[i-1][ptr+1] <= st[i][j]){
				ptr++;
				mx = max(mx,dp[0][i-1][ptr] - pre[1][i-1][ptr]);
			}
			dp[0][i][j] = max(dp[0][i][j],mx + pre[0][i][j]);
		}
		mx = INF;
		ptr = cnt[i-1];
		for(int j=cnt[i]-1;j>=0;j--){
			while(ptr-1>=0 && st[i-1][ptr-1] >= st[i][j]){
				ptr--;
				mx = max(mx,dp[0][i-1][ptr] + pre[1][i][j]);
				mx = max(mx,dp[1][i-1][ptr] + pre[1][i][j]);
			}
			dp[1][i][j] = max(dp[1][i][j],mx - pre[1][i][j]);	
		}
		if(i<2)continue;
		mx = INF;
		ptr = -1;
		for(int j=0;j<cnt[i];j++){
			while(ptr+1 < cnt[i-2] && st[i-2][ptr+1] <= st[i][j]){
				ptr++;
				mx = max(mx,dp[0][i-2][ptr]);
				mx = max(mx,dp[1][i-2][ptr]);
			}
			dp[0][i][j] = max(dp[0][i][j],mx + pre[0][i][j]);
		}
	}
  ll ans = 0;
  for(ll x:dp[0][n])ans = max(ans,x);
  for(ll x:dp[1][n])ans = max(ans,x);
  return ans;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 116 ms 49348 KB Output is correct
2 Correct 135 ms 54140 KB Output is correct
3 Correct 47 ms 37668 KB Output is correct
4 Correct 43 ms 37736 KB Output is correct
5 Correct 327 ms 87508 KB Output is correct
6 Correct 388 ms 81888 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 11 ms 18516 KB Output is correct
2 Correct 205 ms 56808 KB Output is correct
3 Correct 236 ms 62580 KB Output is correct
4 Correct 120 ms 49308 KB Output is correct
5 Correct 154 ms 54124 KB Output is correct
6 Correct 10 ms 18516 KB Output is correct
7 Correct 9 ms 18516 KB Output is correct
8 Correct 10 ms 18576 KB Output is correct
9 Correct 11 ms 18516 KB Output is correct
10 Correct 44 ms 37712 KB Output is correct
11 Correct 44 ms 37632 KB Output is correct
12 Correct 125 ms 49340 KB Output is correct
13 Correct 132 ms 54088 KB Output is correct
14 Correct 119 ms 49148 KB Output is correct
15 Correct 140 ms 49044 KB Output is correct
16 Correct 116 ms 49092 KB Output is correct
17 Correct 123 ms 52260 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 37736 KB Output is correct
2 Correct 52 ms 37744 KB Output is correct
3 Correct 95 ms 38680 KB Output is correct
4 Correct 73 ms 39672 KB Output is correct
5 Correct 120 ms 43172 KB Output is correct
6 Correct 109 ms 43148 KB Output is correct
7 Correct 118 ms 43104 KB Output is correct
8 Correct 112 ms 43160 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18516 KB Output is correct
2 Correct 11 ms 18580 KB Output is correct
3 Correct 12 ms 18508 KB Output is correct
4 Correct 11 ms 18544 KB Output is correct
5 Correct 10 ms 18516 KB Output is correct
6 Correct 10 ms 18516 KB Output is correct
7 Correct 10 ms 18576 KB Output is correct
8 Correct 10 ms 18516 KB Output is correct
9 Correct 10 ms 18580 KB Output is correct
10 Correct 11 ms 18788 KB Output is correct
11 Incorrect 11 ms 18644 KB 1st lines differ - on the 1st token, expected: '278622587073', found: '278441359083'
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18516 KB Output is correct
2 Correct 11 ms 18580 KB Output is correct
3 Correct 12 ms 18508 KB Output is correct
4 Correct 11 ms 18544 KB Output is correct
5 Correct 10 ms 18516 KB Output is correct
6 Correct 10 ms 18516 KB Output is correct
7 Correct 10 ms 18576 KB Output is correct
8 Correct 10 ms 18516 KB Output is correct
9 Correct 10 ms 18580 KB Output is correct
10 Correct 11 ms 18788 KB Output is correct
11 Incorrect 11 ms 18644 KB 1st lines differ - on the 1st token, expected: '278622587073', found: '278441359083'
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 9 ms 18516 KB Output is correct
2 Correct 11 ms 18580 KB Output is correct
3 Correct 12 ms 18508 KB Output is correct
4 Correct 11 ms 18544 KB Output is correct
5 Correct 10 ms 18516 KB Output is correct
6 Correct 10 ms 18516 KB Output is correct
7 Correct 10 ms 18576 KB Output is correct
8 Correct 10 ms 18516 KB Output is correct
9 Correct 10 ms 18580 KB Output is correct
10 Correct 11 ms 18788 KB Output is correct
11 Incorrect 11 ms 18644 KB 1st lines differ - on the 1st token, expected: '278622587073', found: '278441359083'
12 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 42 ms 37736 KB Output is correct
2 Correct 52 ms 37744 KB Output is correct
3 Correct 95 ms 38680 KB Output is correct
4 Correct 73 ms 39672 KB Output is correct
5 Correct 120 ms 43172 KB Output is correct
6 Correct 109 ms 43148 KB Output is correct
7 Correct 118 ms 43104 KB Output is correct
8 Correct 112 ms 43160 KB Output is correct
9 Correct 126 ms 50988 KB Output is correct
10 Correct 108 ms 32736 KB Output is correct
11 Correct 183 ms 47032 KB Output is correct
12 Correct 10 ms 18516 KB Output is correct
13 Correct 9 ms 18516 KB Output is correct
14 Correct 10 ms 18528 KB Output is correct
15 Correct 11 ms 18536 KB Output is correct
16 Correct 10 ms 18480 KB Output is correct
17 Correct 11 ms 18516 KB Output is correct
18 Correct 46 ms 37668 KB Output is correct
19 Correct 45 ms 37652 KB Output is correct
20 Correct 43 ms 37640 KB Output is correct
21 Correct 42 ms 37676 KB Output is correct
22 Incorrect 156 ms 48704 KB 1st lines differ - on the 1st token, expected: '45561826463480', found: '45409419542258'
23 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 116 ms 49348 KB Output is correct
2 Correct 135 ms 54140 KB Output is correct
3 Correct 47 ms 37668 KB Output is correct
4 Correct 43 ms 37736 KB Output is correct
5 Correct 327 ms 87508 KB Output is correct
6 Correct 388 ms 81888 KB Output is correct
7 Correct 11 ms 18516 KB Output is correct
8 Correct 205 ms 56808 KB Output is correct
9 Correct 236 ms 62580 KB Output is correct
10 Correct 120 ms 49308 KB Output is correct
11 Correct 154 ms 54124 KB Output is correct
12 Correct 10 ms 18516 KB Output is correct
13 Correct 9 ms 18516 KB Output is correct
14 Correct 10 ms 18576 KB Output is correct
15 Correct 11 ms 18516 KB Output is correct
16 Correct 44 ms 37712 KB Output is correct
17 Correct 44 ms 37632 KB Output is correct
18 Correct 125 ms 49340 KB Output is correct
19 Correct 132 ms 54088 KB Output is correct
20 Correct 119 ms 49148 KB Output is correct
21 Correct 140 ms 49044 KB Output is correct
22 Correct 116 ms 49092 KB Output is correct
23 Correct 123 ms 52260 KB Output is correct
24 Correct 42 ms 37736 KB Output is correct
25 Correct 52 ms 37744 KB Output is correct
26 Correct 95 ms 38680 KB Output is correct
27 Correct 73 ms 39672 KB Output is correct
28 Correct 120 ms 43172 KB Output is correct
29 Correct 109 ms 43148 KB Output is correct
30 Correct 118 ms 43104 KB Output is correct
31 Correct 112 ms 43160 KB Output is correct
32 Correct 9 ms 18516 KB Output is correct
33 Correct 11 ms 18580 KB Output is correct
34 Correct 12 ms 18508 KB Output is correct
35 Correct 11 ms 18544 KB Output is correct
36 Correct 10 ms 18516 KB Output is correct
37 Correct 10 ms 18516 KB Output is correct
38 Correct 10 ms 18576 KB Output is correct
39 Correct 10 ms 18516 KB Output is correct
40 Correct 10 ms 18580 KB Output is correct
41 Correct 11 ms 18788 KB Output is correct
42 Incorrect 11 ms 18644 KB 1st lines differ - on the 1st token, expected: '278622587073', found: '278441359083'
43 Halted 0 ms 0 KB -