HPU - ACM 여름 훈련 2 주차 개인전: Problem F

1951 단어 정렬
Problem F
Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 83   Accepted Submission(s) : 25
Problem Description
모 부 대 는 신병 대열 훈련 을 실시 하여 신병 을 처음부터 순서대로 번 호 를 매 겨 횡대 로 나란히 세 웠 다. 훈련의 규칙 은 다음 과 같다. 처음부터 1 부터 2 까지 번호, 2 까지 번호, 나머지 는 작은 번호 방향 으로 접근 한 다음 에 처음부터 1 부터 3 까지 번호, 3 까지 번호, 나머지 는 작은 번호 방향 으로 접근 했다.계속 처음부터 1 부터 2 까지 번호...이후 처음부터 1 ∼ 2 번, 1 ∼ 3 번 을 돌아 가면 서 나머지 인원 이 3 명 을 넘 지 않 을 때 까지 진행한다.
 
Input
이 문 제 는 여러 테스트 데이터 팀 이 있 으 며, 첫 번 째 행동 팀 은 N 행 신병 수 이 고, 이 어 N 행 신병 수 이 며, 신병 수 는 5000 을 넘 지 않 는 다.
 
Output
입력 한 신병 수 에 대응 하 는 N 줄 이 있 고, 줄 마다 남 은 신병 의 최초 번 호 를 출력 하 며, 번호 사이 에 빈 칸 이 있 습 니 다.
 
Sample Input

   
   
   
   
2 20 40

 
Sample Output

   
   
   
   
1 7 19 1 19 37

 
AC-code:
#include<stdio.h>

struct bing
{
	int xu;
}a[5005];

int main()
{
	int n,m,t,k,i;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		for(i=1;i<=m;i++)
			a[i].xu=i;
		k=m;
		while(k>=4)
		{
			k=0;
			for(i=1;i<=m;i++)
			{
				if(i%2)
					a[++k].xu=a[i].xu;
			}
			if(k<4)
				break;
			m=k;
			k=0;
			for(i=1;i<=m;i++)
			{
				if(i%3)
					a[++k].xu=a[i].xu;
			}
			m=k;
		}
		if(k==2)
			printf("1 %d
",a[2].xu); else if(k==3) printf("1 %d %d
",a[2].xu,a[3].xu); else printf("1
"); } return 0; }

좋은 웹페이지 즐겨찾기