Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

注意记录已经算出来的数据

Posted by CodesW at 2016-04-23 12:00:23 on Problem 1012
#include <stdio.h>

int main(int argc, char *argv[])
{
	int  k = 0, m = 0 ;
	int  peopleCnt = 0 ;
	int  killCnt = 0 ;
	int  pos = 0 ;
	int  result[16] = {0};

	while(scanf("%d", &k) && k)
	{
		if(result[k])
		{
			printf("%d\r\n", result[k]) ;
			continue ;
		}

		peopleCnt = 2 * k ;
		m = k + 1;

		while(1)
		{	
			pos = 0 ;
			for(killCnt = 0; killCnt < k; killCnt++)
			{
				pos = (pos + m - 1) % (peopleCnt - killCnt) ;
				if(pos < k)
					break ;
			}

			if(killCnt == k)
				break ;

			/* m = n*(k+1) or n*(k+1) + 1 */
			do {
				if(m % (k+1) == 0)
					m++ ;
				else
					m += k ;
			}while((m-1) % peopleCnt < k) ;
		}

		printf("%d\r\n", m) ;
		result[k] = m ;
	}

	return 0 ;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator