TopCoder SRM 372 Div 2
Problem Solving/TopCoder logs 2007. 10. 18. 02:31
요즘 계속 DIV2에서 놀고있다.. 한번 떨어지고나니 계속 못올라가고있다..
문제를 천천히푸는 나는 최소한 두문제는 풀어야하는데.. 열라 구린문제들만 나온다..
이번에도 쉬운문제인데도 불구하고 이해를 못해서 결국 못풀었다.. 젠장..!
SRM 끝나고나서 다시보니 이해가 됐다.. ㅠ_ㅠ
DIV2의 경우 통상 두문제정도는 쉬운데 항상 말리면서 제대로 못풀고있다.. 운도 안따르는것같다..
이번에는 두문제를 푼사람이 1명밖에없었고.. easy를 얼마나 빨리 풀었느냐에따라 등수가 갈렸다..
나도 남들처럼 코딩이 빨라야되는데.. ㅠ_ㅠ
방 10등 전체 304등..
[250] DietPlan
주어진 음식에대해서 아침에 먹고 점심에 먹고 남은것을 저녁에 다 먹어야한다.. 저녁에 먹어야하는 음식들을 sort해서 출력하기.. 단 diet list에 없는 음식을 먹은경우 CHEATER를 출력..
쉬운문제였다.. 'A'부터 'Z'까지 커버하는 배열을 잡아놓고 먹은것에대해 marking하는 방법으로 풀었다..
남들보다 한참 늦게 풀었는데.. 이제 코딩 속도도 높이도록 노력해야겠다..
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 class DietPlan {
9 public:
10
11 string chooseDinner(string diet, string breakfast, string lunch)
12 {
13 char check[128];
14 char buf[128];
15 int i, j;
16 string ret;
17
18 memset(check, 0, sizeof(check));
19 strcpy(buf, diet.c_str());
20 for (i = 0; i < strlen(buf); i++) {
21 check[(int)buf[i]]++;
22 }
23 strcpy(buf, breakfast.c_str());
24 for (i = 0; i < strlen(buf); i++) {
25 if (check[buf[i]] == 0) {
26 return "CHEATER";
27 }
28 check[buf[i]]--;
29 }
30 strcpy(buf, lunch.c_str());
31 for (i = 0; i < strlen(buf); i++) {
32 if (check[buf[i]] == 0) {
33 return "CHEATER";
34 }
35 check[buf[i]]--;
36 }
37 j = 0;
38 for (i = 'A'; i <= 'Z'; i++) {
39 if (check[i] == 1) {
40 buf[j] = i;
41 j++;
42 }
43 }
44 buf[j] = 0;
45 ret = buf;
46 return ret;
47 }
48
49 };
[500] RoadConstruction 1. 같은 차선에서는 앞에있는 차가 먼저 나간다..
2. 위에있는 차선의 차가 먼저 나간다..
3. 위에있는 차선의 차는 반드시 한번 밑에있는 차에게 양보해야한다.
이런 조건을 만족할 때 'D' 번 차 이전에 몇개의 차가 빠져나가는지 구하는 문제..
그냥 simulation 하면 된다.. 컨테스트 도중 마지막 케이스가 이해가 안되서 30분동안 이해해보려고 삽질했었다..
컨테스트 끝나고 알아냈는데.. C -> I -> W -> T -> A -> D 순이다..
그냥 simulation 했다.. 문제 이해만 하면 쉬운문제.. -_-
[1000] RainyDay Y 가 현재 있는 위치이고 H까지 이동해야 한다.. C는 covered되서 비에 맞지 않는지역이다..
비를 최소한 안맞고 가는 방법을 찾는다.. 단 중간에 멈춰서 임의의 시간을 쉴 수 있다..
'R'은 비오는 지역, '.' 은 비가 안오는 지역이고.. 이 정보는 1분마다 옆으로 한칸씩 shift한다..
이 문제는 DP로 풀 수 있을듯 하다.. dp[i][j] = 'i 칸에서 j번째 쉬프트에서 이동할때 비에맞는 최소값' 을 저장하면서 풀면 되려나..? -_-?? 음.. 코딩해봐야되는데 귀찮다.. ㅠ_ㅠ 이러니 실력이 안늘지.. ㅠ_ㅠ;;
소스를 보니 BFS로 푼 사람도 있다..
문제를 천천히푸는 나는 최소한 두문제는 풀어야하는데.. 열라 구린문제들만 나온다..
이번에도 쉬운문제인데도 불구하고 이해를 못해서 결국 못풀었다.. 젠장..!
SRM 끝나고나서 다시보니 이해가 됐다.. ㅠ_ㅠ
DIV2의 경우 통상 두문제정도는 쉬운데 항상 말리면서 제대로 못풀고있다.. 운도 안따르는것같다..
이번에는 두문제를 푼사람이 1명밖에없었고.. easy를 얼마나 빨리 풀었느냐에따라 등수가 갈렸다..
나도 남들처럼 코딩이 빨라야되는데.. ㅠ_ㅠ
방 10등 전체 304등..
[250] DietPlan
주어진 음식에대해서 아침에 먹고 점심에 먹고 남은것을 저녁에 다 먹어야한다.. 저녁에 먹어야하는 음식들을 sort해서 출력하기.. 단 diet list에 없는 음식을 먹은경우 CHEATER를 출력..
쉬운문제였다.. 'A'부터 'Z'까지 커버하는 배열을 잡아놓고 먹은것에대해 marking하는 방법으로 풀었다..
남들보다 한참 늦게 풀었는데.. 이제 코딩 속도도 높이도록 노력해야겠다..
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 class DietPlan {
9 public:
10
11 string chooseDinner(string diet, string breakfast, string lunch)
12 {
13 char check[128];
14 char buf[128];
15 int i, j;
16 string ret;
17
18 memset(check, 0, sizeof(check));
19 strcpy(buf, diet.c_str());
20 for (i = 0; i < strlen(buf); i++) {
21 check[(int)buf[i]]++;
22 }
23 strcpy(buf, breakfast.c_str());
24 for (i = 0; i < strlen(buf); i++) {
25 if (check[buf[i]] == 0) {
26 return "CHEATER";
27 }
28 check[buf[i]]--;
29 }
30 strcpy(buf, lunch.c_str());
31 for (i = 0; i < strlen(buf); i++) {
32 if (check[buf[i]] == 0) {
33 return "CHEATER";
34 }
35 check[buf[i]]--;
36 }
37 j = 0;
38 for (i = 'A'; i <= 'Z'; i++) {
39 if (check[i] == 1) {
40 buf[j] = i;
41 j++;
42 }
43 }
44 buf[j] = 0;
45 ret = buf;
46 return ret;
47 }
48
49 };
[500] RoadConstruction 1. 같은 차선에서는 앞에있는 차가 먼저 나간다..
2. 위에있는 차선의 차가 먼저 나간다..
3. 위에있는 차선의 차는 반드시 한번 밑에있는 차에게 양보해야한다.
이런 조건을 만족할 때 'D' 번 차 이전에 몇개의 차가 빠져나가는지 구하는 문제..
그냥 simulation 하면 된다.. 컨테스트 도중 마지막 케이스가 이해가 안되서 30분동안 이해해보려고 삽질했었다..
컨테스트 끝나고 알아냈는데.. C -> I -> W -> T -> A -> D 순이다..
그냥 simulation 했다.. 문제 이해만 하면 쉬운문제.. -_-
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 class RoadConstruction {
9 public:
10
11 int getExitTime(vector<string> currentLanes)
12 {
13 int n;
14 int i, last, cnt;
15 int pos[100], len[100];
16 char lane[100][100];
17 char check[100][100];
18 n = currentLanes.size();
19 for (i = 0; i < n; i++) {
20 strcpy(lane[i], currentLanes[i].c_str());
21 }
22 for (i = 0; i < n; i++) {
23 pos[i] = 0;
24 len[i] = strlen(lane[i]);
25 }
26 memset(check, 0, sizeof(check));
27 cnt = 0;
28 while (1) {
29 last = -1;
30 for (i = 0; i < n; i++) {
31 if (pos[i] >= len[i])
32 continue;
33 if (check[i][pos[i]] == 1) {
34 break;
35 }
36 check[i][pos[i]] = 1;
37 last = i;
38 }
39 if (i < n) {
40 printf("%c exit\n", lane[i][pos[i]]);
41 if (lane[i][pos[i]] == 'D')
42 break;
43 cnt++;
44 pos[i]++;
45 }
46 else if (i == n) {
47 printf("%c exit\n", lane[last][pos[last]]);
48 if (lane[last][pos[last]] == 'D')
49 break;
50 cnt++;
51 pos[last]++;
52 }
53 }
54 return cnt;
55 }
56
57 };
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 class RoadConstruction {
9 public:
10
11 int getExitTime(vector<string> currentLanes)
12 {
13 int n;
14 int i, last, cnt;
15 int pos[100], len[100];
16 char lane[100][100];
17 char check[100][100];
18 n = currentLanes.size();
19 for (i = 0; i < n; i++) {
20 strcpy(lane[i], currentLanes[i].c_str());
21 }
22 for (i = 0; i < n; i++) {
23 pos[i] = 0;
24 len[i] = strlen(lane[i]);
25 }
26 memset(check, 0, sizeof(check));
27 cnt = 0;
28 while (1) {
29 last = -1;
30 for (i = 0; i < n; i++) {
31 if (pos[i] >= len[i])
32 continue;
33 if (check[i][pos[i]] == 1) {
34 break;
35 }
36 check[i][pos[i]] = 1;
37 last = i;
38 }
39 if (i < n) {
40 printf("%c exit\n", lane[i][pos[i]]);
41 if (lane[i][pos[i]] == 'D')
42 break;
43 cnt++;
44 pos[i]++;
45 }
46 else if (i == n) {
47 printf("%c exit\n", lane[last][pos[last]]);
48 if (lane[last][pos[last]] == 'D')
49 break;
50 cnt++;
51 pos[last]++;
52 }
53 }
54 return cnt;
55 }
56
57 };
[1000] RainyDay Y 가 현재 있는 위치이고 H까지 이동해야 한다.. C는 covered되서 비에 맞지 않는지역이다..
비를 최소한 안맞고 가는 방법을 찾는다.. 단 중간에 멈춰서 임의의 시간을 쉴 수 있다..
'R'은 비오는 지역, '.' 은 비가 안오는 지역이고.. 이 정보는 1분마다 옆으로 한칸씩 shift한다..
이 문제는 DP로 풀 수 있을듯 하다.. dp[i][j] = 'i 칸에서 j번째 쉬프트에서 이동할때 비에맞는 최소값' 을 저장하면서 풀면 되려나..? -_-?? 음.. 코딩해봐야되는데 귀찮다.. ㅠ_ㅠ 이러니 실력이 안늘지.. ㅠ_ㅠ;;
소스를 보니 BFS로 푼 사람도 있다..
'Problem Solving > TopCoder logs' 카테고리의 다른 글
TopCoder SRM 379 Div2 (완료) (0) | 2007.11.29 |
---|---|
TopCoder SRM378 DIV2 (완료) (0) | 2007.11.21 |
TopCoder SRM375 DIV2 (Complete) (6) | 2007.11.11 |
TopCoder SRM374 DIV2 (3) | 2007.11.07 |
TopCoder SRM 373 Div 2 (0) | 2007.10.24 |
TopCoder SRM 371 Div2 (완료) (2) | 2007.10.14 |
TopCoder SRM 370 Div2 (0) | 2007.10.14 |
TopCoder SRM369 DIV2 (6) | 2007.10.05 |
TopCoder SRM 368 Div 1 (0) | 2007.10.03 |
TopCoder SRM 367 Div 2 (완료) (10) | 2007.09.27 |