TopCoder SRM 392 Div2
Problem Solving/TopCoder logs 2008. 3. 7. 15:45
저녁 9시에 열린 상금매치였다.. 이전 매치에서 삽질하는바람에 div2로 강등됐는데.. 바로 상금매치라니.. 오히려 나한텐 잘된일이었다..;; 이번 셋은 easy는 너무너무 쉽고.. med가 상당히 tricky했다.. 흠.. 그래도 med는 풀줄알았는데.. 끝내 submit을 못했다.. ㅠ_ㅠ;; 아.. 나의 코딩실력이 이거밖에 안되다니.. ㅠ_ㅠ med 문제의 경우 sample이 test case를 제대로 커버하지 못해서 챌린지의 향연이었다.. 결국 챌 덕분에 방 1등 차지.. 음.. 정말 쑥쓰럽군..;;
방 1등 전체 43등..
한문제풀고 1등이라니.. 완전 막장이군.. 빨리 실력을 쌓아야겠다..;; 그래도 다시 div1로 복귀.. 이거 당분간 div1과 div2를 왔다리갔다리 할것같다..
[250] AverageCandyLifetime
모든 캔디가 1월1일에 주어지고.. 매달 말일에 캔디를 먹는다.. 각 달마다 먹은 캔디의 개수가 주어질때 캔디의 평균 생명주기를 구하는 문제..
단순히.. 캔디가 먹히기전까지 기간의 합을 모든 캔디의 수로 나누면 된다..
음.. 코드는 별로 깔끔하지 못하군.. 이정도문제는 240점은 넘겨야하는데.. ㅠ_ㅠ
[500] TwoStringMasks
두개의 문자열이 주어지고 각각의 문자열은 중간에 하나의 '*' 이 있다.. 이 '*'은 임의의 문자열로 대치될 수 있을때 두 문자열을 같게 만드는 최소의 문자열 찾기.. 불가능하면 "impossible" return..
음.. 그냥 단순히 코딩하면 되는데.. 결국 실패.. ㅠ_ㅠ 막판에 sample 하나가 안나와서 수정하다가 결국 submit을 못했다..
문제풀다가 생각해 낸 tricky case는 {"ABC*ABC", "*BC"} 였는데.. 역시나.. submit한 6명중에 4명이나 fail했다.. ㅎㅎㅎ 나머지 두명도 system test때 다 fail하고.. 결국.. 얼떨결에 1등을 해버렸군..
아.. 쉽지않은 문제였다.. ㅠ_ㅠ;; 열라 삽질코딩끝에.. 겨우 pass..!!
우선 왼쪽 같은부분 제거.. 그다음 오른쪽 같은부분 제거..
이제 *을 사이에두고 남은 왼쪽과 오른쪽 string이 둘다 하나의 string에서 온것이라면 특별처리..
그게 아니라 하나는 첫번째 하나는 두번째 string에서 왔다면.. 겹치는부분을 제거하면서 붙인다..
휴.. 코딩이 완전 엉망이네.. ㅠ_ㅠ;;
[1000] QuasiLatinSquares
to be updated..
방 1등 전체 43등..
한문제풀고 1등이라니.. 완전 막장이군.. 빨리 실력을 쌓아야겠다..;; 그래도 다시 div1로 복귀.. 이거 당분간 div1과 div2를 왔다리갔다리 할것같다..
[250] AverageCandyLifetime
모든 캔디가 1월1일에 주어지고.. 매달 말일에 캔디를 먹는다.. 각 달마다 먹은 캔디의 개수가 주어질때 캔디의 평균 생명주기를 구하는 문제..
단순히.. 캔디가 먹히기전까지 기간의 합을 모든 캔디의 수로 나누면 된다..
음.. 코드는 별로 깔끔하지 못하군.. 이정도문제는 240점은 넘겨야하는데.. ㅠ_ㅠ
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 class AverageCandyLifetime {
9 public:
10
11 double getAverage(vector <int> eatenCandies)
12 {
13 int sum[15];
14 int a, b, i;
15 sum[1] = 31;
16 sum[2] = 31+28;
17 sum[3] = sum[2]+31;
18 sum[4] = sum[3]+30;
19 sum[5] = sum[4]+31;
20 sum[6] = sum[5]+30;
21 sum[7] = sum[6]+31;
22 sum[8] = sum[7]+31;
23 sum[9] = sum[8]+30;
24 sum[10] = sum[9]+31;
25 sum[11] = sum[10]+30;
26 sum[12] = sum[11]+31;
27 a = b = 0;
28 for (i = 0; i < eatenCandies.size(); i++) {
29 a += eatenCandies[i] * sum[i+1];
30 b += eatenCandies[i];
31 }
32 return (double)a / (double)b;
33 }
34
35 };
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 class AverageCandyLifetime {
9 public:
10
11 double getAverage(vector <int> eatenCandies)
12 {
13 int sum[15];
14 int a, b, i;
15 sum[1] = 31;
16 sum[2] = 31+28;
17 sum[3] = sum[2]+31;
18 sum[4] = sum[3]+30;
19 sum[5] = sum[4]+31;
20 sum[6] = sum[5]+30;
21 sum[7] = sum[6]+31;
22 sum[8] = sum[7]+31;
23 sum[9] = sum[8]+30;
24 sum[10] = sum[9]+31;
25 sum[11] = sum[10]+30;
26 sum[12] = sum[11]+31;
27 a = b = 0;
28 for (i = 0; i < eatenCandies.size(); i++) {
29 a += eatenCandies[i] * sum[i+1];
30 b += eatenCandies[i];
31 }
32 return (double)a / (double)b;
33 }
34
35 };
[500] TwoStringMasks
두개의 문자열이 주어지고 각각의 문자열은 중간에 하나의 '*' 이 있다.. 이 '*'은 임의의 문자열로 대치될 수 있을때 두 문자열을 같게 만드는 최소의 문자열 찾기.. 불가능하면 "impossible" return..
음.. 그냥 단순히 코딩하면 되는데.. 결국 실패.. ㅠ_ㅠ 막판에 sample 하나가 안나와서 수정하다가 결국 submit을 못했다..
문제풀다가 생각해 낸 tricky case는 {"ABC*ABC", "*BC"} 였는데.. 역시나.. submit한 6명중에 4명이나 fail했다.. ㅎㅎㅎ 나머지 두명도 system test때 다 fail하고.. 결국.. 얼떨결에 1등을 해버렸군..
아.. 쉽지않은 문제였다.. ㅠ_ㅠ;; 열라 삽질코딩끝에.. 겨우 pass..!!
우선 왼쪽 같은부분 제거.. 그다음 오른쪽 같은부분 제거..
이제 *을 사이에두고 남은 왼쪽과 오른쪽 string이 둘다 하나의 string에서 온것이라면 특별처리..
그게 아니라 하나는 첫번째 하나는 두번째 string에서 왔다면.. 겹치는부분을 제거하면서 붙인다..
휴.. 코딩이 완전 엉망이네.. ㅠ_ㅠ;;
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 void rev(char* x)
9 {
10 char temp[100];
11 int i, j, len;
12 len = strlen(x);
13 for (i = 0, j = len-1; i < len; i++, j--) {
14 temp[i] = x[j];
15 }
16 temp[i] = 0;
17 strcpy(x, temp);
18 }
19
20 void make_str(char* ss1, char* ss2, char* buf)
21 {
22 int i, j, k;
23 int len1, len2;
24 len1 = strlen(ss1);
25 len2 = strlen(ss2);
26 if (len1 == 0 && len2 == 0) {
27 buf[0] =0;
28 return ;
29 }
30 if (len1 == 0) {
31 strcpy(buf, ss2);
32 return ;
33 }
34 if (len2 == 0) {
35 strcpy(buf, ss1);
36 return ;
37 }
38
39 for (i = 0; i < len1; i++) {
40 if (i + len2 < len1)
41 continue;
42 for (k = 0; k < len2; k++) {
43 if (k+i < len1 && ss1[k+i] != ss2[k])
44 break;
45 }
46 if (k == len2)
47 break;
48 }
49 strcpy(buf, ss1);
50 for (j = i, k = 0; k < len2; k++, j++) {
51 buf[j] = ss2[k];
52 }
53 buf[j] = 0;
54 }
55
56 class TwoStringMasks {
57 public:
58
59 string shortestCommon(string s1, string s2)
60 {
61 char str1[100], str2[100];
62 char temp1[100], temp2[100], buf[100];
63 char f[100], e[100];
64 int a1, a2, b1, b2;
65 int len1, len2;
66 int i, j, k;
67 string xx, yy, zz, res;
68 strcpy(str1, s1.c_str());
69 strcpy(str2, s2.c_str());
70 len1 = strlen(str1);
71 len2 = strlen(str2);
72 if (!strcmp(str1, "*") && !strcmp(str2, "*"))
73 return "";
74
75 for (i = 0; i < len1 && i < len2; i++) {
76 if (str1[i] == '*' || str2[i] == '*')
77 break;
78 f[i] = str1[i];
79 if (str1[i] != str2[i])
80 return "impossible";
81 }
82 f[i] = 0;
83 a1 = i;
84 b1 = i;
85
86 for (i = len1-1, j = len2-1, k = 0; i >= 0 && j >= 0; i--, j--, k++) {
87 if (str1[i] == '*' || str2[j] == '*')
88 break;
89 e[k] = str1[i];
90 if (str1[i] != str2[j])
91 return "impossible";
92 }
93 e[k] = 0;
94 rev(e);
95 a2 = i;
96 b2 = j;
97
98 if (str2[b1] == '*') {
99 if (str1[a2] == '*') {
100 for (i = a1, j = 0; i < len1; i++, j++) {
101 if (str1[i] == '*') {
102 temp1[j] = 0;
103 break;
104 }
105 temp1[j] = str1[i];
106 }
107 for (i = 0; i < len2; i++) {
108 if (str2[i] == '*')
109 break;
110 }
111 i++;
112 for (j = 0; i <= b2; i++, j++) {
113 temp2[j] = str2[i];
114 }
115 temp2[j] = 0;
116 make_str(temp1, temp2, buf);
117 printf("temp1 = %s, temp2 = %s, buf = %s\n", temp1, temp2, buf);
118 }
119 else {
120 for (i = 0, j = 0; i < len1; i++) {
121 if (str1[i] == '*')
122 continue;
123 buf[j++] = str1[i];
124 }
125 buf[j] = 0;
126 res = buf;
127 return res;
128 }
129 }
130 else if (str1[a1] == '*') {
131 if (str2[b2] == '*') {
132 for (i = b1, j = 0; i < len2; i++, j++) {
133 if (str2[i] == '*') {
134 temp1[j] = 0;
135 break;
136 }
137 temp1[j] = str2[i];
138 }
139 for (i = 0; i < len1; i++) {
140 if (str1[i] == '*')
141 break;
142 }
143 i++;
144 for (j = 0; i <= a2 ; i++, j++) {
145 temp2[j] = str1[i];
146 }
147 temp2[j] = 0;
148 make_str(temp1, temp2, buf);
149 printf("temp1 = %s, temp2 = %s, buf = %s\n", temp1, temp2, buf);
150 }
151 else {
152 for (i = 0, j = 0; i < len2; i++) {
153 if (str2[i] == '*')
154 continue;
155 buf[j++] = str2[i];
156 }
157 buf[j] = 0;
158 res = buf;
159 return res;
160 }
161 }
162 printf("f = %s, buf = %s\n", f, buf);
163 xx = f;
164 yy = buf;
165 zz = e;
166 res = xx+yy+zz;
167 printf("res ------------> %s\n", res.c_str());
168 return res;
169 }
170
171 };
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 void rev(char* x)
9 {
10 char temp[100];
11 int i, j, len;
12 len = strlen(x);
13 for (i = 0, j = len-1; i < len; i++, j--) {
14 temp[i] = x[j];
15 }
16 temp[i] = 0;
17 strcpy(x, temp);
18 }
19
20 void make_str(char* ss1, char* ss2, char* buf)
21 {
22 int i, j, k;
23 int len1, len2;
24 len1 = strlen(ss1);
25 len2 = strlen(ss2);
26 if (len1 == 0 && len2 == 0) {
27 buf[0] =0;
28 return ;
29 }
30 if (len1 == 0) {
31 strcpy(buf, ss2);
32 return ;
33 }
34 if (len2 == 0) {
35 strcpy(buf, ss1);
36 return ;
37 }
38
39 for (i = 0; i < len1; i++) {
40 if (i + len2 < len1)
41 continue;
42 for (k = 0; k < len2; k++) {
43 if (k+i < len1 && ss1[k+i] != ss2[k])
44 break;
45 }
46 if (k == len2)
47 break;
48 }
49 strcpy(buf, ss1);
50 for (j = i, k = 0; k < len2; k++, j++) {
51 buf[j] = ss2[k];
52 }
53 buf[j] = 0;
54 }
55
56 class TwoStringMasks {
57 public:
58
59 string shortestCommon(string s1, string s2)
60 {
61 char str1[100], str2[100];
62 char temp1[100], temp2[100], buf[100];
63 char f[100], e[100];
64 int a1, a2, b1, b2;
65 int len1, len2;
66 int i, j, k;
67 string xx, yy, zz, res;
68 strcpy(str1, s1.c_str());
69 strcpy(str2, s2.c_str());
70 len1 = strlen(str1);
71 len2 = strlen(str2);
72 if (!strcmp(str1, "*") && !strcmp(str2, "*"))
73 return "";
74
75 for (i = 0; i < len1 && i < len2; i++) {
76 if (str1[i] == '*' || str2[i] == '*')
77 break;
78 f[i] = str1[i];
79 if (str1[i] != str2[i])
80 return "impossible";
81 }
82 f[i] = 0;
83 a1 = i;
84 b1 = i;
85
86 for (i = len1-1, j = len2-1, k = 0; i >= 0 && j >= 0; i--, j--, k++) {
87 if (str1[i] == '*' || str2[j] == '*')
88 break;
89 e[k] = str1[i];
90 if (str1[i] != str2[j])
91 return "impossible";
92 }
93 e[k] = 0;
94 rev(e);
95 a2 = i;
96 b2 = j;
97
98 if (str2[b1] == '*') {
99 if (str1[a2] == '*') {
100 for (i = a1, j = 0; i < len1; i++, j++) {
101 if (str1[i] == '*') {
102 temp1[j] = 0;
103 break;
104 }
105 temp1[j] = str1[i];
106 }
107 for (i = 0; i < len2; i++) {
108 if (str2[i] == '*')
109 break;
110 }
111 i++;
112 for (j = 0; i <= b2; i++, j++) {
113 temp2[j] = str2[i];
114 }
115 temp2[j] = 0;
116 make_str(temp1, temp2, buf);
117 printf("temp1 = %s, temp2 = %s, buf = %s\n", temp1, temp2, buf);
118 }
119 else {
120 for (i = 0, j = 0; i < len1; i++) {
121 if (str1[i] == '*')
122 continue;
123 buf[j++] = str1[i];
124 }
125 buf[j] = 0;
126 res = buf;
127 return res;
128 }
129 }
130 else if (str1[a1] == '*') {
131 if (str2[b2] == '*') {
132 for (i = b1, j = 0; i < len2; i++, j++) {
133 if (str2[i] == '*') {
134 temp1[j] = 0;
135 break;
136 }
137 temp1[j] = str2[i];
138 }
139 for (i = 0; i < len1; i++) {
140 if (str1[i] == '*')
141 break;
142 }
143 i++;
144 for (j = 0; i <= a2 ; i++, j++) {
145 temp2[j] = str1[i];
146 }
147 temp2[j] = 0;
148 make_str(temp1, temp2, buf);
149 printf("temp1 = %s, temp2 = %s, buf = %s\n", temp1, temp2, buf);
150 }
151 else {
152 for (i = 0, j = 0; i < len2; i++) {
153 if (str2[i] == '*')
154 continue;
155 buf[j++] = str2[i];
156 }
157 buf[j] = 0;
158 res = buf;
159 return res;
160 }
161 }
162 printf("f = %s, buf = %s\n", f, buf);
163 xx = f;
164 yy = buf;
165 zz = e;
166 res = xx+yy+zz;
167 printf("res ------------> %s\n", res.c_str());
168 return res;
169 }
170
171 };
[1000] QuasiLatinSquares
to be updated..
'Problem Solving > TopCoder logs' 카테고리의 다른 글
TopCoder SRM 398 Div1 (0) | 2008.04.16 |
---|---|
TopCoder SRM 397 Div2 (완료) (0) | 2008.04.13 |
SRM 395 Div1 (0) | 2008.04.09 |
TopCoder SRM 394 Div 1 (2) | 2008.03.24 |
흠냥.. 탑코더 SRM 393 참여 실패.. -_-;; (0) | 2008.03.12 |
TopCoder SRM 391 Div1 (0) | 2008.02.27 |
TopCoder TCO08 Online Round 1 (2) | 2008.02.17 |
TopCoder TCO08 Qualification Round 3(3A) (0) | 2008.02.15 |
TopCoder TCO08 Qualification Round 1 (4) | 2008.02.06 |
TopCoder SRM 390 Div1 (2) | 2008.02.03 |