UVa 130 - Roman Roulette

题目:约瑟夫环变形,每次第k个出去后,他后面的第k个人站到他的位置,然后从这个位置继续;

现在你的编号,是1号,问从几号开始你回剩到最后。

分析:数论,模拟。直接模拟计算即可。

设从x位置开始则,最后剩下的人是s(编号0~n-1)有,你的新编号为m-x+1 = s,则x = m-s+1。

说明:看错题了,输出从1开始数的答案,WA了2次。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

int p[101];

int find(int s, int k, int n)
{
	while (k)
		if (p[s = (s+1)%n] != -1)
			k --;
	return s;
}

int main()
{
	int n,k,m;
	while (cin >> n >> k && n) {
		m = n;
		for (int i = 0 ; i < m ; ++ i)
			p[i] = i;
		int s = (k-1)%n;
		for (int i = 1 ; i < m ; ++ i) {
			p[s] = -1;
			swap(p[find(s, k, n)], p[s]);
			s = find(s, k, n);
		}
		printf("%d\n",(m-p[s])%m+1);
	}
    return 0;
}
时间: 2024-10-12 19:02:26

UVa 130 - Roman Roulette的相关文章

Roman Roulette(约瑟夫环模拟)

Roman Roulette Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 286    Accepted Submission(s): 105 Problem Description The historian Flavius Josephus relates how, in the Romano-Jewish conflict of

uva :185 - Roman Numerals(dfs)

题目:uva :185 - Roman Numerals 题目大意:给出一个字符串的等式,问这个字符串是否是罗马等式吗?有符合的阿拉伯等式吗?前者是就输出correct or incorrect ,后者就得分情况: ambiguous 能组成阿拉伯等式的字母组合大于等于2, valid 能组成阿拉伯等式的字母组合只有1种 impossible 没有符合阿拉伯等式的字母组合. 解题思路: 1.能不能组成罗马等式的规则:每个当前的字母(i)的左边的字母((i-1)所对应的值如果比i所对应的值小的话,

RomanRoulette

Roman Roulette Time Limit:   1000MS             Memory Limit:   65535KB Submissions:   36             Accepted:   19 Description西元67年,在羅馬和猶太人的衝突中,史學家 Josephus 和其他40個人被關在一個洞穴中.羅馬人知道 Josephus 的下落後希望他能投效羅馬帝國.但是他的同伴們卻不允許他投降.所以Josephus 建議他們彼此殺害,一個接一個,被殺的順

HOJ 题目分类

转自:http://blog.sina.com.cn/s/blog_65f3869301011a1o.html ******************************************************************************* 简单题(包括枚举,二分查找,(复杂)模拟,基础数据结构(栈.队列),杂题等 ****************************************************************************

ascii码所有字符对照表(包含汉字和外国文字)

http://www.0xaa55.com/thread-398-1-1.html看到了0xaa55的这个帖子,想起了2年前我在51cto发的一个帖子http://down.51cto.com/data/293635 [C] 纯文本查看 复制代码 01 #include <stdio.h>  02 void main( void ) 03 { 04     FILE *stream; 05     int i,j; 06     stream=fopen("ascii.txt&quo

uva 759 - The Return of the Roman Empire

1 #include <cstdio> 2 #include <string> 3 #include <map> 4 using namespace std; 5 6 const int SIZE = 13; 7 const int value[] = {1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000}; 8 const string sign[] = {"I", "IV"

[题解]UVa 12661 Funny Car Racing - spfa

很简单的一道最短路问题.分情况处理赛道的打开和关闭. Code 1 /** 2 * UVa 3 * Problem#12661 4 * Accepted 5 * Time:50ms 6 */ 7 #include<iostream> 8 #include<fstream> 9 #include<sstream> 10 #include<cstdio> 11 #include<cstdlib> 12 #include<cstring>

[题解]UVa 11082 Matrix Decompressing

开始眨眼一看怎么也不像是网络流的一道题,再怎么看也觉得像是搜索.不过虽然这道题数据范围很小,但也不至于搜索也是可以随随便便就可以过的.(不过这道题应该是special judge,因为一题可以多解而且题目中然而并没有什么要求,所以说可以考虑思考一下这道题有木有什么"套路"之类的通法) 比如说有这么一组数据 原矩阵 1 2 3 4 7 8 9 5 6 输入 3 3 6 25 45 14 28 45 然后将每一行的和写在每一列对应的行上(很明显有问题) 6 0 0 19 0 0 20 0

[uva] 10099 - The Tourist Guide

10099 - The Tourist Guide 题目页:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1040 Mr.G.自己也算一个人……… 反映到代码里是127行 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 3