본문 바로가기

나는 오늘,

(371)
집배원 한상덕 *피로도를 최소부터 최대까지 하나의 배열로 저장한 후 투포인터를 사용해서 모든 집을 순회했을 때의 차이를 구한다. *우체국으로 돌아왔을 때까지의 최단 경로를 구하는 게 아니기 때문에 굳이 다시 P로 돌아올 필요가 없다. (이거 중요!) *K개 만큼의 집을 들렀을 때 최소 피로도를 구하면 된다. #include #include #include #include #include using namespace std; int n, house = 0; char map[51][51]; int tired[51][51]; bool visited[51][51]; vector v; typedef pair pp; typedef pair pppp; pp start; int dx[8] = {-1, -1, -1, 0, 0, 1, ..
게리맨더링2 풀이 * 유형 : 시뮬레이션 * 속도 : 16ms * 경계선(5)를 먼저 채우고, 구역 1,2,3,4를 채운다. * 경계선을 먼저 채우는 이유는 구역 1,2,3,4를 채울 때 5구역(경계선)에 도달하면 더 이상 채우지 않고 다음 줄로 이동하기 위함이다. * 완전 탐색을 해야 하므로, x(0~n), y(0~n)을 전부 탐색하면서 d1,d2를 다르게 설정해서 탐색을 한다. * 모든 구역을 다 채웠을 때 [가장 많은 인구가 사는 구역 - 가장 적은 인구가 사는 구역] 이 최소가 되는 값을 구한다. (calc()) #include #include #include #define INF 987654321 using namespace std; //BOJ 게리맨더링2 [17779](https://www.acmicpc...
나는 위대한 슈퍼스타K #include #include #include #include using namespace std; typedef pair pp; bool compare1(const pp &a, const pp &b) { return a.first > b.first; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m, k; cin >> n >> m >> k; vector ability; // map mapping; for (int i = 0; i > a >> score; ability.push_back(pp(score, a)..
IOIOI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m; string s; cin >> n >> m >> s; //n+1개의 I 와 N개의 O //I로 시작하고 그 다음에 O인 것들 중에 길이가 2n+1이면 ok int len = 2 * n + 1; bool flag = false; int cnt = ..
새로운 게임2 *맵의 가장자리를 모두 2로 설정해서 범위를 벗어나는 경우에도 파란색 칸에 간 것과 같이 처리했음 *vector를 이차원 배열로 사용해서 reverse, insert, clear로 쉽게 구현을 했다. *이 문제에서 가장 핵심적으로 고려해야 할 점은 파란색 칸을 만나서 방향을 바꿔서 나오는 경우에 다음에 만나는 칸의 색을 고려해야 한다. -빨간색이면 순서를 뒤집어서 다시 저장을 해야할 것이고, 파란색이면 방향만 바뀐채로 저장이 될 것이다. #include #include #include #include #include using namespace std; int n, k; bool flag = 0; int map[14][14]; vector chase[14][14]; typedef pair pp; type..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 #include #include using namespace std; typedef pair pp; pp king, stone; char map[8][8]; string dire[8] = {"LT", "T", "RT", "L", "R", "LB", "B", "RB"}; int dx[8] = {-1,..
미네랄 *클러스터들을 하나의 영역으로 보고 번호를 라벨링하여 구분했음 *클러스터끼리 인접해있다면 내려가지 않음 *내려가는 칸의 수는 min(바닥과의 높이 차, 다른 클러스터와의 차이) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102..
영화수집 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #include #include #include #include #define MAXX 100001 using namespace std; int tree[MAXX+MAXX], movieH[MAXX+MAXX]; int n, m; //영화의 수, 보려고 하는 영화의 개수 void update(int idx, int diff) { while (idx 0) { ret += tree[idx]..