2011년 1월 28일 금요일

Google code jam 2010 Qualification Round : Problem A

Problem :  http://code.google.com/codejam/contest/dashboard?c=433101#

문제를 이해한 뒤 알고리즘은 정말 쉽게 구성했지만,
문제해석이 가장 어려운 부분이었다;; (영어실력향상이 절실;;)

각각의 0, 1은 하나의 snapper라고 하고, 1은 ON, 0은 OFF를 의미한다.
k=1 : 1000
k=2 : 0100
k=3 : 1100
k=4 : 0010
k=5 : 1010
k=6 : 0110
k=7 : 1110
k=8 : 0001
....

패턴이 보이는가?
k의 bit 표현 패턴이다.. 단 문제는 앞에서 부터 시작한다는 것(이건 큰문제 되지않는다)과 앞에서부터 연속되어야 한다. 왜냐하면 Electronic flow가 전원부터 N번째 snapper까지 연결되어 있어야 하기때문에 처음부터 N번째까지 모두 ON이 되어 있어야 한다.

이하 소스코드
//진수 변환
  int tmp = K;
  for(int i=0; tmp>0; i++)
  {
   bit[i] = tmp%2;
   tmp /= 2;
  }
  // 앞에서부터 연속된 비트만 허용 : electronic flow
  for(int i=1; i<30; i++)
  {
   if(bit[i-1]==0)
    bit[i]=0;
  }
 

댓글 없음:

댓글 쓰기