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