일요일 새벽 2시에 열렸던 매치..
250 은 푸는데 좀 오래걸리고.. 나머지 시간은 500 코딩 삽질하다가 끝났다..
이번에도 10번 방에 20번째 시드를 받았는데.. 요즘 계속 빡센 방에만 걸리고있다..
rating 은 14 점 상승.. 하락하는거는 겨우 멈추긴했는데.. 흠..
근데.. 새벽 2시는 너무 힘든데..;;





Level1 - DoubleXor
double xor (^^) 연산을 새로 정의하였는데..
a, b, c, d, e, f 가 각각 한자리 digit 이고, x = (a^d)%10, y = (b^e)%10, z = (c^f)%10 라고 하면
abc ^^ def = xyz 가 된다..
만약에 두 수의 자리수가 다르면 하나에 leading 0 를 붙여서 길이를 맞춘다..

N ^^ (N-1) ^^ (N-2) ^^ ... ^^ 1 을 구하기..

해법은 그냥 Brute Force..
좀더 짧게 짤수도 있지만 그냥 시키는데로 충실하게 짰다..

  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
 11 class DoubleXor {
 12 public:
 13
 14 int calculate(int N)
 15 {
 16     int res;
 17     int i, j, k, temp;
 18     int len1, len2;
 19     char buf1[100], buf2[100];
 20     res = N;
 21     for (k = N-1; k >= 1; k--) {
 22         sprintf(buf1, "%d", res);
 23         sprintf(buf2, "%d", k);
 24         len1 = strlen(buf1);
 25         len2 = strlen(buf2);
 26         if (len1 == len2) {
 27             temp = 0;
 28             for (i = 0; i < len1; i++) {
 29                 temp *= 10;
 30                 temp += ((buf1[i]-'0') ^ (buf2[i]-'0')) % 10;
 31             }
 32             res = temp;
 33         }
 34         else if (len1 > len2) {
 35             temp = 0;
 36             for (i = 0; i < len1-len2; i++) {
 37                 temp *= 10;
 38                 temp += buf1[i]-'0';
 39             }
 40             for (j = 0; j < len2; j++, i++) {
 41                 temp *= 10;
 42                 temp += ((buf1[i]-'0') ^ (buf2[j]-'0')) % 10;
 43             }
 44             res = temp;
 45         }
 46         else {
 47             temp = 0;
 48             for (j = 0; j < len2-len1; j++) {
 49                 temp *= 10;
 50                 temp += buf2[j]-'0';
 51             }
 52             for (i = 0; i < len1; i++, j++) {
 53                 temp *= 10;
 54                 temp += (((buf1[i]-'0') ^ buf2[j]-'0')) % 10;
 55             }
 56             res = temp;
 57         }
 58     }
 59 printf("res = %d\n", res);
 60     return res;
 61 }
 62 };



Level2 - NumbersAndMatches
성냥을 이용하여 숫자를 만들 수 있다.. 임의의 수 N 이 들어올때.. 최대 K 개의 성냥을 이동할 수 있을때.. 만들수 있는 수가 몇개나 있는지 구하기.. 성냥은 다른 digit 으로 이동시킬수도 있다.. 그러나 새로 성냥을 더하거나 남는거를 버릴수는 없다..


to be updated



Level3 - MegaSum


to be updated..


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

TopCoder SRM 459 Div 1  (0) 2010.01.20
TopCoder SRM 458 Div 1  (0) 2010.01.17
TopCoder SRM 457 Div 1  (0) 2010.01.06
[SRM 456] 2009년 마지막 SRM  (0) 2009.12.23
TopCoder SRM 455 Div 1  (0) 2009.12.19
TopCoder SRM 453.5 (??) Div 1  (0) 2009.11.26
[SRM 453] 탑코더 아레나 폭발 -> unrated event  (4) 2009.11.18
TopCoder SRM 450 Div 1  (0) 2009.10.19
TopCoder Member Pilot 2  (0) 2009.10.01
TopCoder SRM 449 Div 1  (0) 2009.09.24

to Top