제출 #1344507

#제출 시각아이디문제언어결과실행 시간메모리
1344507re4ler팬케이크 정렬 (NOI12_pancake)C++20
25 / 25
231 ms4704 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long

int cnt;
map<string, int> idx;
int dis[47000], a[10];

void bfs(int x) {
	queue<string> q;
	string s = "";
	for(int i = x; i >= 1; i--) s += char((i + '0'));
	//cout << s << '\n';
	q.push(s);
	idx[s] = ++cnt;
	dis[cnt] = 0;
	while(!q.empty()) {
		string u = q.front();
		q.pop();
		for(int i = 0; i < u.size(); i++) {
			for(int j = 0; j < u.size() - 1; j++) {
				string tmp = "";
				for(int k = 0; k < j; k++) tmp += u[k];
				for(int k = u.size() - 1; k >= j; k--) tmp += u[k];
				if(idx[tmp]) continue;
				idx[tmp] = ++cnt;
				dis[cnt] = dis[idx[u]] + 1;
				q.push(tmp);				 
			}
		}
	}
}

signed main() {
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	for(int i = 1; i <= 8; i++) bfs(i);
	int tc;
	cin >> tc;
	while(tc--) {
		int n;
		cin >> n;
		vector<int> nen;
		for(int i = 1; i <= n; i++) {
			cin >> a[i];
			nen.push_back(a[i]);
		} 	
		sort(nen.begin(), nen.end());
		nen.erase(unique(nen.begin(), nen.end()), nen.end());
		string tmp = "";
		for(int i = 1; i <= n; i++) {
			a[i] = lower_bound(nen.begin(), nen.end(), a[i]) - nen.begin() + 1;
			tmp += char(a[i] + '0');
		}
		//cout << tmp << '\n';
		cout << dis[idx[tmp]] << '\n';
	}
}
#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...