题目名称 1183. [长郡中学2004] 慈善的约瑟夫
输入输出 jose.in/out
难度等级
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 GravatarMakazeu 于2012-10-18加入
开放分组 全部用户
提交状态
分类标签
模拟
分享题解
通过:21, 提交:34, 通过率:61.76%
Gravatar0-0 100 0.004 s 0.17 MiB Pascal
Gravatar晖灰熊 100 0.004 s 0.31 MiB C++
GravatarBokjan 100 0.005 s 0.41 MiB C++
Gravatar晖灰熊 100 0.006 s 0.56 MiB C++
Gravatar苏轼 100 0.007 s 0.29 MiB Pascal
Gravatar我想 100 0.007 s 0.29 MiB Pascal
Gravatar临轩听雨ゐ 100 0.008 s 3.54 MiB C++
GravatarTBK 100 0.009 s 3.53 MiB C++
Gravatar晖灰熊 100 0.010 s 0.28 MiB C++
GravatarTruth.Cirno 100 0.014 s 2.38 MiB C++
关于 慈善的约瑟夫 的近10条评论(全部评论)
找规律~~
Gravatar临轩听雨ゐ
2012-10-21 10:09 2楼
.......没事用set deque就超时吗= =.........好吧,至少证明了一件事,如果需要循环删除迭代器
for(;q!=s.end();q++)//s是Set,j,q是迭代器
{
m++;
j=q,q--;
s.erase(j);
}
GravatarCloud
2012-10-19 10:02 1楼

1183. [长郡中学2004] 慈善的约瑟夫

★   输入文件:jose.in   输出文件:jose.out   简单对比
时间限制:1 s   内存限制:128 MiB

慈善的约瑟夫

【问题描述】

你一定听说过约瑟夫问题吧?即从n个人中找出唯一的幸存者。现在老约瑟夫将组织一个皆在欢喜的新游戏,假设n个人站成一圈,从第1个人开始交替的去掉游戏者,但只是暂时去掉(例如首先去掉2),直到最后剩下唯一的幸存者为止。幸存者选出后,所有比幸存者号码高的人每人将得到1TK(一种货币),永久性离开。其余剩下的人将重复以上的过程,比幸存者号码高的人每人将得到1TK后离开。经过这样的过程后,一旦人数不再减少,则最后剩下的那些人将得到2TK。请你计算一下老约瑟夫一共要付出多少钱?

如图,第一轮有5人,幸存者是3,所以4、5得到1TK后离开,下一轮幸存者仍然是3,因此没有人离开,所以每人得到2TK,游戏结束,总共要付出2+2*3=8TK。

【输入】

只有一个整数:n;1≤n≤32767,表示参加游戏的人数。

【输出】

只有一个整数,不超过65535,表示总共要付出的钱数。

【样例】

jose.in jose.out

10         13