관리 메뉴

너와 나의 스토리

4112. 이상한 피라미드 탐험 D5 본문

카테고리 없음

4112. 이상한 피라미드 탐험 D5

노는게제일좋아! 2020. 6. 7. 00:32
반응형

문제: https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWJHmLraeEwDFAUH&categoryId=AWJHmLraeEwDFAUH&categoryType=CODE

 

소스 코드:

#include <iostream>
#include <queue>
#include <vector>
#include <string.h>
#include <algorithm>
#include <deque>
#include <cmath>
#include <string>
#include <set>
using namespace std;


int tc,n,m;
int level[10150], dp[10150];

queue<int> q;
void func() {
	q.push(n);
	while (!q.empty()) {
		int cur = q.front();
		q.pop();

		if (cur < m) {
			if (level[cur] == level[cur + 1] && !dp[cur + 1]) {
				dp[cur + 1] = dp[cur] + 1;
				q.push(cur + 1);
			}
			if (!dp[cur + level[cur]]) {
				dp[cur + level[cur]] = dp[cur] + 1;
				q.push(cur + level[cur]);
			}
			if (!dp[cur + level[cur] + 1]) {
				dp[cur + level[cur] + 1] = dp[cur] + 1;
				q.push(cur + level[cur] + 1);
			}
		}
		else if (cur > m) {
			if (level[cur - 1] == level[cur]) {
				
				if (!dp[cur - 1]) {
					dp[cur - 1] = dp[cur] + 1;
					q.push(cur - 1);
				}
				if (!dp[cur - level[cur]]) {
					dp[cur - level[cur]] = dp[cur] + 1;
					q.push(cur - level[cur]);
				}
				
			}
			if (level[cur] == level[cur + 1] && !dp[cur - level[cur] + 1]) {
				dp[cur - level[cur] + 1] = dp[cur] + 1;
				q.push(cur - level[cur] + 1);
			}
		}
		else {
			while (!q.empty()) q.pop();
			return;
		}
	}
}
int main() {
	cin.tie(0), cout.tie(0);
	ios::sync_with_stdio(false);

	int tmp=0;
	int check = 1;
	int l = 1;
	for (int i = 1; i <= 10000; i++) {
		if (tmp == check) {
			tmp = 0;
			check++;
			l++;
		}
		tmp++;
		level[i] = l;
	}

	cin >> tc;
	for (int z = 1; z <= tc; z++) {
		cin >> n >> m;
		memset(dp, 0, sizeof(dp));
		func();
		cout << "#" << z << " "<<dp[m]<<"\n";
	}
	return 0;
}
반응형
Comments