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 20061463 at 2014-03-02 21:05:33 on Problem 1012 and last updated at 2014-03-02 21:06:13
In Reply To:题中例子,取下个生成过程 Posted by:20061463 at 2014-03-02 21:04:26
> #include <iostream>
> #include <vector>
> using namespace std;
> 
> void printGuys(vector<int> guys) {
> 	int i = 0, size = guys.size();
> 	for (i = 0; i < size; ++i) {
> 		printf("i:%d guy:%d\t", i, guys[i]);
> 	}
> 	printf("\n");
> }
> 
> void test() {
> 	vector<int> guys(6, 0);
> 	int n = 6, m = 5;
> 
> 	int i = 0, next = 0, size = n;
> 	for (i = 0; i < n; ++i) {
> 		guys[i] = i + 1;
> 	}
> 	while (guys.size() > 1) {
> 		size = guys.size();
> 		next = (next + m - 1) % size;
> 		printf("\n next:%d\t guy:%d size:%d\n", next, guys[next], size);
> 		printGuys(guys);
> 		for (i = next; i < size - 1; i++) {
> 			guys[i] = guys[i + 1];
> 		}
> 		guys.pop_back();
> 	}
> 	printGuys(guys);
> }
> 
> int main(void) {
> 	test();
> //	freopen("input.txt", "r", stdin);
>          return 0;
> }


打表的一种解法:
#include <stdio.h>
int main_0(void) {
	freopen("input.txt", "r", stdin);
	int result[14] = { 0 };
	int k = 0;

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

		int miniM = k;
		while (true) {
			int n = k * 2; // n = 2*k;
			int next = 0, killed = 0;
			// kill first k guys.
			for (killed = 0; killed < k; ++killed) {
				next = (next + miniM - 1) % n;
				if (next < k) {
					break;
				}
				--n;
			}
			if (killed == k) {
				break;
			}
			++miniM;
		}
		result[k] = miniM;
//		printf("k:%d m:%d\n", k, miniM);
		printf("%d\n", miniM);
	}

	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