Untitled

mail@pastecode.io avatarunknown
plain_text
a month ago
1.8 kB
1
Indexable
Never
#include<iostream>
using namespace std;
const int MaxL = 65;
int TC, N, vt[3], l[3], tau[MaxL], sum, mind;	
int a[6][3] = {{0, 1, 2},{0, 2, 1},{1, 0, 2},{1, 2, 0},{2, 0, 1},{2, 1, 0}};
void doing(int k, int stt, int id, int d) {
	if(d >= mind) return;
	if(k == sum) {
		if(d < mind) mind = d;
		return;
	}
	int index = vt[a[id][stt]] - 1;
	int tmp = k + 1;
	for(int i = stt - 1; i >= 0; i--)
		tmp -= l[a[id][i]];
	int newstt = tmp == l[a[id][stt]] ? stt + 1 : stt;
	if(tau[index] == 0) {
		tau[index] = 1;
		doing(k + 1, newstt, id, d + 1);
		tau[index] = 0;
	} else {
		int le = index - 1, ri = index + 1;
		while(tau[le] != 0 && le >= 0) le--;
		while(tau[ri] != 0 && ri < N) ri++;
		if(le != -1 && ri != N) {
			if(index - le == ri - index && newstt == stt + 1) {
				tau[le] = 1;
				doing(k + 1, newstt, id, d + (index - le + 1));
				tau[le] = 0;
				tau[ri] = 1;
				doing(k + 1, newstt, id, d + (ri - index + 1));
				tau[ri] = 0;
			} else {
				int tmpi = index - le < ri - index ? le : ri; 
				int tmpd = index - le < ri - index ? index - le + 1 : ri - index + 1; 
				tau[tmpi] = 1;
				doing(k + 1, newstt, id, d + tmpd);
				tau[tmpi] = 0;
			}
		} else if(le != -1) {
			tau[le] = 1;
			doing(k + 1, newstt, id, d + (index - le + 1));
			tau[le] = 0;
		} else if(ri != N) {
			tau[ri] = 1;
			doing(k + 1, newstt, id, d + (ri - index + 1));
			tau[ri] = 0;
		}
	}
}
int main() {
	freopen("input.txt", "r", stdin);
	cin >> TC;
	for(int tc = 0; tc < TC; tc++) {
		cin >> N;
		mind = 2147483646;
		for(int i = 0; i < 3; i++) cin >> vt[i] >> l[i];
		fill_n(tau, N, 0);
		sum = l[0] + l[1] + l[2];
		for(int i = 0; i < 6; i++) doing(0, 0, i, 0);
		cout << "Case #" << tc + 1 << endl << mind << endl;
	}
	return 0;
}