어제 새벽에 열린 매치..
가뜩이나 축구하고와서 피곤한데.. 억지로 SRM 한판 했다..
근데 중간에 아레나에서 뭐라고 자꾸 에러나서 그냥 끄고 잤다.. -_-
아침에 확인해보니 역시.. unrated event..

뭐 이런 토론이 진행중이군..
http://apps.topcoder.com/forums/?module=Thread&threadID=706017&start=0

탑코더 아레나 똑바로 안만드냐..!!!



우리 방 결과.. 6등이면 나름 선전했네..


Level1 - MathContest

W와 B로 이루어진 string 에서 앞에서부터 하나씩 빼낼때 W 이면 남은 W를 B로, B를 W로 바꾸고, B 이면 남은 string 을 reverse 한다.. 작업이 모두 끝났을 때, B 를 몇번 뽑았는지..

이 문제의 트릭은.. 실제로 string 을 reverse 할 필요 없고 그냥 뒤에서부터 읽으면 된다.. 그리고 W <-> B 를 실제로 invert 할 필요 없고, 역시 W를 B로 B를 W로 생각하고 풀면 된다..

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <algorithm>
  4 #include <vector>
  5 #include <string>
  6 using namespace std;
  7 //#define min(x, y) ((x) > (y) ? (y) : (x))
  8 //#define max(x, y) ((x) > (y) ? (x) : (y))
  9 //#define INF 999999999
 10 //#define EPS 1e-14
 11
 12 class  MathContest {
 13 public:
 14
 15 int countBlack(string ballSequence, int repetitions)
 16 {
 17     int i;
 18     int l, r;
 19     int cnt;
 20     int fl1, fl2;
 21     string str;
 22     str = "";
 23     for (i = 0; i < repetitions; i++) {
 24         str = str + ballSequence;
 25     }
 26     fl1 = 0; // reverse
 27     fl2 = 0;
 28     l = 0;
 29     r = str.size()-1;
 30     cnt = 0;
 31     while (l <= r) {
 32         if (fl1 == 0) {
 33             if (fl2 == 0) {
 34                 if (str[l] == 'W') {
 35                     fl1 = 1;
 36                 }
 37                 else {
 38                     fl2 = 1;
 39                     cnt++;
 40                 }
 41                 l++;
 42             }
 43             else if (fl2 == 1) {
 44                 if (str[l] == 'W') {
 45                     cnt++;
 46                     fl2 = 0;
 47                 }
 48                 else {
 49                     fl1 = 1;
 50                 }
 51                 l++;
 52             }
 53         }
 54         else if (fl1 == 1) {
 55             if (fl2 == 0) {
 56                 if (str[r] == 'W') {
 57                     fl1 = 0;
 58                 }
 59                 else {
 60                     fl2 = 1;
 61                     cnt++;
 62                 }
 63                 r--;
 64             }
 65             else if (fl2 == 1) {
 66                 if (str[r] == 'W') {
 67                     fl2 = 0;
 68                     cnt++;
 69                 }
 70                 else {
 71                     fl1 = 0;
 72                 }
 73                 r--;
 74             }
 75         }
 76     }
 77     return cnt;
 78 }
 79
 80 };


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

TCO11 R1 - 탈락  (0) 2011.06.23
SRM 509 !!  (0) 2011.06.09
SRM 507 - 나이스!  (0) 2011.05.30
TCO11 Qual2  (0) 2011.05.20
TCO11 Qual1  (2) 2011.05.15
SRM 503 흑흑 ㅠ_ㅠ;;  (0) 2011.04.18
SRM 501  (0) 2011.04.01
SRM 498 - WTF!!  (0) 2011.02.27
SRM 496  (2) 2011.02.02
SRM 491 - Blue 복귀..  (0) 2010.12.21

to Top