## TopCoder SRM374 DIV2

오랜만에 열린 SRM.. 또 망했다.. 연일 최저 rating을 갱신하고있다.. ㅠ_ㅠ 어쩌다 이지경이 됐는지..
이번매치의 경우 블챌이 rating하락의 주범이다.. 앞으로 블챌은 자제하고 안정적으로 가야겠다..
500점도 쉬운문제였는데 너무 안일하게 대처하다 틀렸다.. 흐미.. 확실히 맞았다고 생각했는데..
학교가 정전되는바람에 학교서버에서 코딩을 못하고 .net에서 코딩했는데.. 완전 어색.. -_-;
탑코더가 쉽지않다는것을 다시한번 느꼈다.. 방 12등 전체 436등.. ㅠ_ㅠ 흐미.. 1군은 커녕.. green도 버거워보이는군..

 HockeyFault

아이스하키 링크가 주어지고 선수들의 좌표가 주어진다.. 아이스링크안에 몇명의 선수가 있는지 세는 문제..

좌표가 가운데 정사각형에 포함되는지 세고.. 그렇지 않을경우 좌우의 반원에 포함되는지 계산한다..
쉬운문제..

1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 #include <cmath>
7 using namespace std;
8
9 class HockeyFault {
10 public:
11
12 int numPlayers(int width, int height, int x, int y, vector <int> px, vector <int> py)
13 {
14     int cnt, i;
15     int n = px.size();
16     double x1, y1;
17     double temp1, temp2, r;
18     cnt = 0;
19     r = 0.5 * height;
20     for (i = 0; i < n; i++) {
21         x1 = (double)px[i];
22         y1 = (double)py[i];
23         if (x1 >= x && x1 <= x+width && y1 >= y && y1 <= y+height) {
24             cnt++;
25         }
26         else {
27             temp1 = sqrt((x-x1)*(x-x1)+(y+r-y1)*(y+r-y1));
28             temp2 = sqrt((x+width-x1)*(x+width-x1)+(y+r-y1)*(y+r-y1));
29             if (temp1 <= r || temp2 <= r)
30                 cnt++;
31         }
32
33     }
34
35     return cnt;
36 }
37
38 };

 SyllableSorting

단어들이 들어오고.. 모음을 제외하고 재나열하여 정렬하기..

쉬운문제였는데.. 방심하다 틀렸다.. 조건에따라 정렬했을때 결과가 같으면 원래 소트하기전에 단어 마디를 비교했어야했는데 원래 문자열을 그냥 비교했다.. (그렇게하면 모든경우를 커버할줄 알았다.. 왜그랬지.. -_-) 흠.. 대충대충하는습관을 고쳐야겠다..

1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <vector>
5 #include <string>
6 using namespace std;
7
8 typedef struct _s {
9     string ori;
10     vector<string> o;
11     vector<string> syl;
12 } DATA;
13
14 DATA data;
15
16 bool comp(const DATA& x, const DATA& y)
17 {
18     int i, k;
19     char str1, str2;
20     for (i = 0; i < x.syl.size(); i++) {
21         if (y.syl.size() <= i) {
22             return false;
23         }
24         strcpy(str1, x.syl[i].c_str());
25         strcpy(str2, y.syl[i].c_str());
26
27         k = strcmp(str1, str2);
28         if (k == 0)
29             continue;
30         if (k < 0)
31             return true;
32         return false;
33     }
34
35     for (i = 0; i < x.o.size(); i++) {
36         if (y.o.size() <= i) {
37             return false;
38         }
39         strcpy(str1, x.o[i].c_str());
40         strcpy(str2, y.o[i].c_str());
41
42         k = strcmp(str1, str2);
43         if (k == 0)
44             continue;
45         if (k < 0)
46             return true;
47         return false;
48     }
49     strcpy(str1, x.ori.c_str());
50     strcpy(str2, y.ori.c_str());
51     k = strcmp(str1, str2);
52     if (k < 0)
53         return true;
54     return false;
55 }
56
57 int is_vow(char ch)
58 {
59     if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u')
60         return 1;
61     return 0;
62 }
63
64 class SyllableSorting {
65 public:
66
67     vector <string> sortWords(vector <string> words)
68     {
69         int i, j, k;
70         int n, len;
71         char buf;
72         char w;
73         vector<string> res;
74
75         n = words.size();
76         for (i = 0; i < n; i++) {
77             data[i].ori = words[i];
78
79             strcpy(buf, words[i].c_str());
80             len = strlen(buf);
81
82             j = k = 0;
83
84             while (j < len) {
85                 while (!is_vow(buf[j]) && j < len) {
86                     w[k++] = buf[j];
87                     j++;
88                 }
89                 while (is_vow(buf[j]) && j < len) {
90                     w[k++] = buf[j];
91                     j++;
92                 }
93
94                 w[k] = 0;
95                 k = 0;
96                 //printf("w = %s\n", w);
97                 data[i].syl.push_back(w);
98                 data[i].o.push_back(w);
99                 sort(data[i].syl.begin(), data[i].syl.end());
100             }
101
102         }
103
104         sort(data, data+n, comp);
105         for (i = 0; i < n; i++) {
106             res.push_back(data[i].ori);
107         }
108         return res;
109     }
110
111
112 };

 PlayerExtraction

to be updated..

#### 'Problem Solving > TopCoder logs' 카테고리의 다른 글

 TopCoder SRM381 DIV2 (완료)  (2) 2007.12.09 2007.12.08 2007.11.29 2007.11.21 2007.11.11 2007.11.07 2007.10.24 2007.10.18 2007.10.14 2007.10.14 2007.10.05

1. Shine_ing 2007.11.11 01:47 신고

탑코더..저도 한번 해보고 싶은데..어떻게 해야하는 건지 정말 난감하네요 -_-); 이 블로그에서 관련 글을 보기는 했지만 정확히 어떻게 해야하는건지 이해가 안되네요;; 나중에 기회 되시면 좀 더 상세히 설명 부탁드릴게요 ㅠ_ㅠ;;

• 2007.11.11 10:53 신고

사실 영어의 압박으로 처음시작하는게 상당히 힘들죠.. ^^ 그래도 막상 시작하고나면 별로 안어렵습니다.. 우선 아레나라는 자바에플릿을 깔고 접속해서 위에 메뉴중에 practice roome >> srm 을 해보세요.. 그러면 그러면 대충 어떻게되는건지 이해하실수있어요.. 실제 active contest도 하는방법이 같습니다..

irc의 #icpc 채널이나..
http://www.algospot.com 에 가시면 관련된사람들(?) 이 많이 있습니다.. ^^

2. Shine_ing 2007.11.11 20:10 신고

감사합니다 ^^