답안 #1113606

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1113606 2024-11-16T19:26:46 Z Dan4Life Growing Vegetable is Fun 3 (JOI19_ho_t3) C++17
75 / 100
500 ms 430152 KB
#include <bits/stdc++.h>
using namespace std;
 
#define pb push_back
#define sz(a) (int)a.size()
#define all(a) begin(a),end(a)
 
using vi = vector<int>;
using ll = long long;
using ar2 = array<ll,2>;
 
const int N = (int)4e2+2;
const int INF = (int)1e9;
const ll LINF = (ll)2e18;
 
vi v[3];
string s;
int n, cnt[3];
int dp[N][3][N/2][N];
int16_t dp2[3][3][N][N][N];

int num(int cnt0, int cnt1, int cnt2, int f0, int f1, int f2){
	if(!cnt0) return 1;
	if(dp2[f0][f1][cnt0][cnt1][cnt2]) 
		return dp2[f0][f1][cnt0][cnt1][cnt2];
	int n1 = 0, n2 = 0, XD = v[f0][cnt0-1];
	if(cnt1 and v[f1][cnt1-1] > XD){
		int pos = lower_bound(all(v[f1]),XD)-begin(v[f1]);
		n1 = cnt1-pos;
	}
	if(cnt2 and v[f2][cnt2-1] > XD){
		int pos = lower_bound(all(v[f2]),XD)-begin(v[f2]);
		n2 = cnt2-pos;
	}
	return dp2[f0][f1][cnt0][cnt1][cnt2]=n1+n2+1;
}
 
void swp(int i, int j){
	swap(cnt[i],cnt[j]); swap(v[i],v[j]);
}

int main(){
	ios_base::sync_with_stdio(false); cin.tie(0);
	cin >> n >> s;
	for(int i = 0; i < n; i++){
		char u = s[i];
		if(u=='R') s[i]=0;
		else if(u=='G') s[i]=1;
		else s[i]=2;
		cnt[s[i]]++; v[s[i]].pb(i+1);
	}
	if(cnt[0]>cnt[1])swp(0,1);
	if(cnt[1]>cnt[2])swp(1,2);
	if(cnt[0]>cnt[1])swp(0,1);
	memset(dp,0x3f3f3f3f,sizeof(dp));
	if(cnt[0]) dp[1][0][1][0] = v[0][0]-1;
	if(cnt[1]) dp[1][1][0][1] = v[1][0]-1;
	if(cnt[2]) dp[1][2][0][0] = v[2][0]-1;
	int ans = INF;
	for(int i = 2; i <= n; i++){
		for(int j = 0; j < 3; j++){
			for(int m = 0; m < 3; m++){
				if(m==j) continue;
				for(int k = 0; k <= min(i,cnt[0]); k++){
					for(int l = 0; l <= min(i,cnt[1]); l++){
						int o = i-k-l; if(o>i or o>cnt[2]) continue;
						if(k and j==0){
							int f0 = v[0][k-1]+num(k,l,o,0,1,2)-1;
							if(f0>=i) dp[i][j][k][l] = min(dp[i][j][k][l], dp[i-1][m][k-1][l]+f0-i);
						}
						if(l and j==1){
							int f1 = v[1][l-1]+num(l,k,o,1,0,2)-1;
							if(f1>=i) dp[i][j][k][l] = min(dp[i][j][k][l], dp[i-1][m][k][l-1]+f1-i);
						}
						if(o and j==2){
							int f2 = v[2][o-1]+num(o,k,l,2,0,1)-1;
							if(f2>=i) dp[i][j][k][l] = min(dp[i][j][k][l], dp[i-1][m][k][l]+f2-i);
						}
					}
				}
			}
		}
	}
	for(int j = 0; j < 3; j++)
		for(int k = 0; k <= cnt[0]; k++)
			for(int l = 0; l <= cnt[1]; l++)
				ans = min(ans, dp[n][j][k][l]);
	if(ans>=INF) ans=-1;
	cout << ans << "\n";
}

Compilation message

joi2019_ho_t3.cpp: In function 'int main()':
joi2019_ho_t3.cpp:50:11: warning: array subscript has type 'char' [-Wchar-subscripts]
   50 |   cnt[s[i]]++; v[s[i]].pb(i+1);
      |           ^
joi2019_ho_t3.cpp:50:22: warning: array subscript has type 'char' [-Wchar-subscripts]
   50 |   cnt[s[i]]++; v[s[i]].pb(i+1);
      |                      ^
# 결과 실행 시간 메모리 Grader output
1 Correct 256 ms 382796 KB Output is correct
2 Correct 257 ms 382792 KB Output is correct
3 Correct 256 ms 382792 KB Output is correct
4 Correct 256 ms 382792 KB Output is correct
5 Correct 241 ms 382792 KB Output is correct
6 Correct 267 ms 383048 KB Output is correct
7 Correct 251 ms 382908 KB Output is correct
8 Correct 278 ms 382812 KB Output is correct
9 Correct 240 ms 382812 KB Output is correct
10 Correct 255 ms 382792 KB Output is correct
11 Correct 288 ms 382788 KB Output is correct
12 Correct 270 ms 382864 KB Output is correct
13 Correct 269 ms 382796 KB Output is correct
14 Correct 268 ms 382792 KB Output is correct
15 Correct 269 ms 383048 KB Output is correct
16 Correct 271 ms 383048 KB Output is correct
17 Correct 290 ms 382792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 256 ms 382796 KB Output is correct
2 Correct 257 ms 382792 KB Output is correct
3 Correct 256 ms 382792 KB Output is correct
4 Correct 256 ms 382792 KB Output is correct
5 Correct 241 ms 382792 KB Output is correct
6 Correct 267 ms 383048 KB Output is correct
7 Correct 251 ms 382908 KB Output is correct
8 Correct 278 ms 382812 KB Output is correct
9 Correct 240 ms 382812 KB Output is correct
10 Correct 255 ms 382792 KB Output is correct
11 Correct 288 ms 382788 KB Output is correct
12 Correct 270 ms 382864 KB Output is correct
13 Correct 269 ms 382796 KB Output is correct
14 Correct 268 ms 382792 KB Output is correct
15 Correct 269 ms 383048 KB Output is correct
16 Correct 271 ms 383048 KB Output is correct
17 Correct 290 ms 382792 KB Output is correct
18 Correct 265 ms 384072 KB Output is correct
19 Correct 263 ms 384072 KB Output is correct
20 Correct 279 ms 384072 KB Output is correct
21 Correct 267 ms 384248 KB Output is correct
22 Correct 260 ms 383832 KB Output is correct
23 Correct 275 ms 384072 KB Output is correct
24 Correct 267 ms 383624 KB Output is correct
25 Correct 265 ms 383048 KB Output is correct
26 Correct 274 ms 383200 KB Output is correct
27 Correct 270 ms 383816 KB Output is correct
28 Correct 270 ms 384072 KB Output is correct
29 Correct 285 ms 384328 KB Output is correct
30 Correct 258 ms 384072 KB Output is correct
31 Correct 264 ms 384072 KB Output is correct
32 Correct 271 ms 384044 KB Output is correct
33 Correct 276 ms 383304 KB Output is correct
34 Correct 275 ms 383560 KB Output is correct
35 Correct 268 ms 383948 KB Output is correct
36 Correct 289 ms 384072 KB Output is correct
37 Correct 274 ms 383816 KB Output is correct
38 Correct 264 ms 383956 KB Output is correct
39 Correct 277 ms 384072 KB Output is correct
40 Correct 271 ms 383056 KB Output is correct
41 Correct 271 ms 383304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 263 ms 382792 KB Output is correct
2 Correct 278 ms 384840 KB Output is correct
3 Correct 278 ms 384740 KB Output is correct
4 Correct 274 ms 384788 KB Output is correct
5 Correct 277 ms 384844 KB Output is correct
6 Correct 267 ms 384752 KB Output is correct
7 Correct 270 ms 384840 KB Output is correct
8 Correct 254 ms 384868 KB Output is correct
9 Correct 265 ms 384864 KB Output is correct
10 Correct 281 ms 384840 KB Output is correct
11 Correct 258 ms 384892 KB Output is correct
12 Correct 261 ms 383816 KB Output is correct
13 Correct 268 ms 384028 KB Output is correct
14 Correct 287 ms 384308 KB Output is correct
15 Correct 300 ms 384816 KB Output is correct
16 Correct 284 ms 384708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 256 ms 382796 KB Output is correct
2 Correct 257 ms 382792 KB Output is correct
3 Correct 256 ms 382792 KB Output is correct
4 Correct 256 ms 382792 KB Output is correct
5 Correct 241 ms 382792 KB Output is correct
6 Correct 267 ms 383048 KB Output is correct
7 Correct 251 ms 382908 KB Output is correct
8 Correct 278 ms 382812 KB Output is correct
9 Correct 240 ms 382812 KB Output is correct
10 Correct 255 ms 382792 KB Output is correct
11 Correct 288 ms 382788 KB Output is correct
12 Correct 270 ms 382864 KB Output is correct
13 Correct 269 ms 382796 KB Output is correct
14 Correct 268 ms 382792 KB Output is correct
15 Correct 269 ms 383048 KB Output is correct
16 Correct 271 ms 383048 KB Output is correct
17 Correct 290 ms 382792 KB Output is correct
18 Correct 265 ms 384072 KB Output is correct
19 Correct 263 ms 384072 KB Output is correct
20 Correct 279 ms 384072 KB Output is correct
21 Correct 267 ms 384248 KB Output is correct
22 Correct 260 ms 383832 KB Output is correct
23 Correct 275 ms 384072 KB Output is correct
24 Correct 267 ms 383624 KB Output is correct
25 Correct 265 ms 383048 KB Output is correct
26 Correct 274 ms 383200 KB Output is correct
27 Correct 270 ms 383816 KB Output is correct
28 Correct 270 ms 384072 KB Output is correct
29 Correct 285 ms 384328 KB Output is correct
30 Correct 258 ms 384072 KB Output is correct
31 Correct 264 ms 384072 KB Output is correct
32 Correct 271 ms 384044 KB Output is correct
33 Correct 276 ms 383304 KB Output is correct
34 Correct 275 ms 383560 KB Output is correct
35 Correct 268 ms 383948 KB Output is correct
36 Correct 289 ms 384072 KB Output is correct
37 Correct 274 ms 383816 KB Output is correct
38 Correct 264 ms 383956 KB Output is correct
39 Correct 277 ms 384072 KB Output is correct
40 Correct 271 ms 383056 KB Output is correct
41 Correct 271 ms 383304 KB Output is correct
42 Correct 263 ms 382792 KB Output is correct
43 Correct 278 ms 384840 KB Output is correct
44 Correct 278 ms 384740 KB Output is correct
45 Correct 274 ms 384788 KB Output is correct
46 Correct 277 ms 384844 KB Output is correct
47 Correct 267 ms 384752 KB Output is correct
48 Correct 270 ms 384840 KB Output is correct
49 Correct 254 ms 384868 KB Output is correct
50 Correct 265 ms 384864 KB Output is correct
51 Correct 281 ms 384840 KB Output is correct
52 Correct 258 ms 384892 KB Output is correct
53 Correct 261 ms 383816 KB Output is correct
54 Correct 268 ms 384028 KB Output is correct
55 Correct 287 ms 384308 KB Output is correct
56 Correct 300 ms 384816 KB Output is correct
57 Correct 284 ms 384708 KB Output is correct
58 Execution timed out 646 ms 430152 KB Time limit exceeded
59 Halted 0 ms 0 KB -