ACM-ICPC 2009년도 기출 _ Candy War

Programming/Algorithm 2010. 10. 1. 17:06

알고리즘 유치원 선생님인 영희는 간식시간이 되자 아이들에게 사탕을 나누어 주려고 하였다. 하지만 욕심 많고 제멋대로인 유치원 아이들은 차례대로 받으라는 선생님의 말을 무시한 채 마구잡이로 사탕을 집어 갔고 많은 사탕을 집어 간 아이가 있는가 하면 사탕을 거의 차지하지 못하고 우는 아이도 있었다.
말로 타일러도 아이들이 말을 듣지 않자 영희는 한 가지 놀이를 제안했다. 일단 모든 아이들이 원으로 둘러 앉는다. 그리고 모든 아이들은 동시에 자기가 가지고 있는 사탕의 절반을 오른쪽 아이에게 준다. 만약 이 결과 홀수개의 사탕을 가지게 된 아이가 있을 경우 선생님이 한 개를 보충해 짝수로 만들어 주기로 했다. 흥미로워 보이는 이 놀이에 아이 들은 참여 했고 이 과정을 몇 번 거치자 자연스럽게 모든 아이들이 같은 수의 사탕을 가지게 되어 소란은 종료되었다.
자기가 가진 사탕의 반을 옆에 오른쪽에 앉은 아이에게 주는 과정과 선생님이 사탕을 보충해 주는 과정을 묶어서 1순환이라고 할 때 몇 번의 순환을 거치면 모든 아이들이 같은 수의 사탕을 가지게 되는지 계산 해 보자. 단, 처음부터 홀수개의 사탕을 가지고 있으면 선생님이 짝수로 보충을 먼저 해주며 이 경우 순환수에 들어가지 않는다. 선생님은 충분한 수의 사탕을 갖고 있다고 가정하자.

입력

입력은 표준입력(standard input)을 통해 받아들인다. 입력의 첫 줄에는 테스트 케이스의 개수 T (1 ≤ T ≤ 20)가 주어진다. 각각의 테스트 케이스의 첫 줄에는 아이의 인원 N (1 ≤N ≤ 10)이 주어지고 그 다음 줄에는 각 아이들이 초기에 가지고 있는 사탕의 개수 Ci ( 1 ≤ i ≤ N  ,  1 ≤ Ci≤ 30)가 주어진다. 분배 시 C1의 오른쪽에는 C 2가, C 2의 오른쪽에는 C 3가…… 같은 식으로 앉게 되며 C N의 오른쪽에는 C 1이 앉게 된다.

출력

출력은 표준출력(standard output)을 통하여 출력한다. 각 테스트 케이스에 대하여 모든 아이가 같은 개수의 사탕을 가질 때까지 몇 순환이 걸리는지 출력하시오.

Sample Input

4
5
2 4 7 8 9
1
9
6
10 5 13 2 7 8
4
3 4 4 3

Output for the Sample Input

6
0
4
0

"동시에" 라는 키워드에 주목 해야 한다.
예컨데, 2번 아이가 3번 아이에게 사탕을 줄 때는 1 번 아이에게 사탕을 받기 전이다. 
필자는 바보 같이 절반주고 나서 그 절반을 감하는 것을 깜박해서 뻘짓햇다는 후문이...;;

 

'Programming > Algorithm' 카테고리의 다른 글

ACM-ICPC 2010년도 O.T. 문제 2 - Delivery  (2) 2010.10.04
ACM-ICPC 2010년도 O.T. 문제 1 - Ducci Sequence  (0) 2010.10.04
암호 깨기 (Crypt Kicker)  (0) 2010.09.30
동맹 휴업 (Hartal)  (0) 2010.09.03
포커 패(Poker Hands)  (0) 2010.09.01

암호 깨기 (Crypt Kicker)

Programming/Algorithm 2010. 9. 30. 19:07

텍스트를 암호화하는 방법 중에 보안상 취약하긴 하지만 흔하게 쓰이는 방법으로 알파벳 글자를 다른 글자로 돌리는 방법이 있다. 즉 알파벳의 각 글자를 다른 글자로 치환한다. 암호화된 것을 다시 원래대로 되돌릴 수 있으려면 두 개의 서로 다른 글자가 같은 글자로 치환되지 않아야 한다.

암호화된 텍스트가 한 줄 이상 입력되는데, 각 줄마다 서로 다른 치환 방법이 적용된다고 가정하자.
암호화 이전의 텍스트에 있는 단어는 모두 주어진 사전에 들어있는 단어라고 가정하고, 암호화된 텍스트를 해독하여 원래 텍스트를 알아내자.

입력

입력은 한 개의 정수 n이 들어있는 행으로 시작되며 그 다음 줄부터는 한 줄에 하나씩 n개의 소문자로 쓰인 단어들이 알파벳 순으로 입력된다. 이 n개의 단어들은 복호화된 텍스트에 들어갈 수 있는 단어로 구성된 사전이다. 사전 뒤에는 몇 줄의 텍스트가 입력된다. 각 줄은 앞에서 설명했던 방법에 따라 암호화된다.

사전에 들어갈 수 있는 단어의 개수는 1,000개를 넘지 않는다. 단어의 길이는 16글자를 넘지 않는다. 암호화된 텍스트에는 소문자와 스페이스만 들어가며 한 줄의 길이는 80글자를 넘어가지 않는다.

출력

각 줄을 복호화하여 표준 출력으로 출력한다. 여러 문장으로 복호화될 수 있다면 그 중 아무 결과나 출력하면 된다. 가능한 풀이가 없다면 알파벳 모든 문자를 *로 바꾼다.

입력 예
6
and
dick
jane
puff
spot
yertle
bjvg xsb hxsn  xsb   qymm   xsb rqat     xsb   pnetfn
xxxx yyy zzzz www  yyyy    aaa bbbb   ccc   dddddd

출력 예
dick and jane and puff and spot and yertle
**** *** **** *** **** *** **** *** ******

문자열을 저장할때 error C2106 : '=' : 왼쪽 피연산자는 l-value이어야 합니다. 오류가 뜰경우
> strcpy를 이용하라.

1.글자수가 사전 단어, 암호화된 텍스트 양쪽 다 유일할때는 반드시 그 단어로 치환 되어야 합니다
2.암호화된 텍스트에 있는 글자수가 사전에 없다면 복호화가 불가능 합니다.(* 표시해야함)
3.2개 이상 존재하는 단어들은 1번 과정에서 복호화된 문자들부터 하나씩 처리해나가도록 합시다...

 



'Programming > Algorithm' 카테고리의 다른 글

ACM-ICPC 2010년도 O.T. 문제 1 - Ducci Sequence  (0) 2010.10.04
ACM-ICPC 2009년도 기출 _ Candy War  (0) 2010.10.01
동맹 휴업 (Hartal)  (0) 2010.09.03
포커 패(Poker Hands)  (0) 2010.09.01
유쾌한 점퍼(Jolly Jumpers)  (0) 2010.08.31

동맹 휴업 (Hartal)

Programming/Algorithm 2010. 9. 3. 14:49

방글라데시의 정당들은 자신의 세를 과시하기 위해 정기적인 동맹 휴업(파업)을 추진하는데, 이 동맹 휴업은 경제에 상당한 피해를 끼칠 수 있다. 이 문제에서는 각 당을 동맹 휴업 지수(hartal parameter)라고 부르는 h라는 양의 정수로 나타낼 수 있다고 하자. 이 동맹 휴업 지수는 한 동맹 휴업과 다음 동맹 휴업 사이의 기간을 날짜 수로 표시한 값이다.

세 개의 정당이 있다고 생각해보자. 그리고 i번째 당의 동맹 휴업지수를 hi라고 할때 h1 =3, h2 =4, h3 = 8이라고 가정하자. N 일(N=14)일 동안의 세 당의 행보를 시뮬레이션하면 다음과 같이 표시할 수 있다. 시뮬레이션은 항상 일요일에 시작하며 금요일이나 토요일에는 동맹 휴업이 없다.

 요일 1
일 
 2
3
화 
4
수 
5
목 
6
금 
7
토 
8
일 
9
월 
10
화 
11
수 
12
목 
13
금 
14
토 
 1 정당              X        
 2 정당                   X    
 3 정당               X            
 휴업      1            5    
 
이 결과를 보면 14일 동안 정확하게 다섯 번의 동맹 휴업(3,4,8,9,12일)이 있음을 알 수 있다. 6일은 금요일이기 때문에 동맹 휴업이 일어나지 않는다. 결국 2주 동안 근무 일수로 5일의 동맹 휴업이 실시된다.

몇 정당의 동맹 휴업 지수와, 어떤 정수 N이 주어졌을 때, N일 가운데 동맹 휴업으로 인해 일을 하지 않은 근무 일수를 계산하라.

입력

입력의 첫번째 줄에는 입력될 테스트 케이스의 개수를 나타내는 하나의 정수 T가 들어있다. 각 테스트 케이스의 첫번째 줄에는 한 개의 정수N(7<=N<=3,650)이 들어있으며 시뮬레이션을 돌릴 기간(날 수)을 나타낸다. 그 다음 줄에는 정당의 개수를 나타내는 정수 P(1<=P<=100)이 들어간다. 그 다음부터 시작하는 P개의 줄 가운데 i번째 줄(1<=i<=P)에는 i번째 정당의 동맹 휴업 지수를 나타내는 양의 정수 hi(7의 배수는 아님)가 들어있다.

출력

각 테스트 케이스에 대해 손실된 근무 일수를 한 줄에 하나씩 출력한다.

입력 예

2
14
3
3
4
8
100
4
12
15
25
40

출력 예

5
15


역시 문제의 풀이보다 문제의 이해가 어려웠던 문제 ㅡㅡ ;;
그러나 막상 알면 쉽다. 이 문제는 해당 시뮬레이션 기간동안 그냥 금,토를 제외한 휴업날을 카운트만하면 된다.

'Programming > Algorithm' 카테고리의 다른 글

ACM-ICPC 2009년도 기출 _ Candy War  (0) 2010.10.01
암호 깨기 (Crypt Kicker)  (0) 2010.09.30
포커 패(Poker Hands)  (0) 2010.09.01
유쾌한 점퍼(Jolly Jumpers)  (0) 2010.08.31
호주식 투표법(Australian Voting)  (0) 2010.08.27