ZOJ 1088 System Overload
题目大意:浙大的破网络容量有限,太多人同时使用BBS就会系统崩溃。为了保持系统正常工作,过载时就需要切断部分用户。规则是把玉泉所有的建筑从1到n编号,设定一个常数m。从1开始数,第m幢建筑的网络被切断,然后再从1开始继续往下数。数到n之后回到第1幢。曹光彪大楼的编号是2,这是计算机学院的大本营。此题的目的就是根据上述规则,确定常数m,使得曹楼是全校最后一幢被切断网络的建筑。
解法:在数学界有一个经典的约瑟夫环问题(Josephus Problem)。约瑟夫环问题是这样的,有n个人围成一个圈,分别编号为1,2,3…n,从第1个人开始报数,报到偶数的人出列,剩下的人继续,直到仅剩最后一个人位置。那么,如果我想做这个站到最后的人,最开始我应该站在哪个编号的位置?如果是隔2个人报数,我又应该站在哪里?如果是隔k个人呢?我在Google上搜索的时候看到有人推荐一本书《具体数学》。在这本书的第一章(也许第二章)里有详细的分析和证明。
这道题和约瑟夫环的问题也差不多,指是从后往前倒推。要保证坚持到最后的人是2号,起始位置是1号,报数的间隔是多少。间隔数m从2开始往上一个个地试。判断的精髓就是这个递归公式:k=(k+m-1)%i+1。如果经过n-1次的递归计算,k的值是1,那么这个m就是所求的答案了。
参考代码:
#include<iostream>
using namespace std; int main(){
int n,m,i,k;
while(cin>>n&&n!=0){
for(m=2;m<32767;m++){
k=1;
for(i=2;i<n;i++)
k=(k+m-1)%i+1; //Josephus Problem
if(k==1){
cout<<m<<endl;
break;
} }
} return 0;
}
ZOJ 1088 System Overload的更多相关文章
- C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...
- F - System Overload(约瑟夫环变形)
Description Recently you must have experienced that when too many people use the BBS simultaneously, ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- 详解OJ(Online Judge)中PHP代码的提交方法及要点【举例:ZOJ 1001 (A + B Problem)】
详解OJ(Online Judge)中PHP代码的提交方法及要点 Introduction of How to submit PHP code to Online Judge Systems Int ...
- Adaptive partitioning scheduler for multiprocessing system
A symmetric multiprocessing system includes multiple processing units and corresponding instances of ...
- C10K问题渣翻译
The C10K problem [Help save the best Linux news source on the web -- subscribe to Linux Weekly News! ...
- [Oracle]UNIX与Windows 2000上Oracle的差异(I)
作者:Ian Adam & David Stien, SAIC Ltd 日期:19-Dec-2003 出处:http://www.dbanotes.net翻译:Fenng ---------- ...
- 31. pt-variable-advisor
pt-variable-advisor h=192.168.100.101,P=3306,u=admin,p=admin mysqladmin var>/root/test/pt-variabl ...
随机推荐
- 二模 (6) day1
第一题: 设 S(N)表示 N 的各位数字之和,如 S(484)=4+8+4=16,S(22)=2+2=4.如果一个正整数 x满足 S(x*x)=S(x)*S(x),我们称 x 为 Rabbit Nu ...
- WDCP管理面板安装启动EXIF、bcmath完整步骤
一般我们网站建设的需要,如果使用WDCP面板默认的功能就足够使用,如果需要特殊程序的特定组件支持,就需要独立的安装支持组件.比如一位朋友的程序需要支持EXIF.bcmath组件,这不老蒋寻找解决方法, ...
- 【同行说技术】Python程序员小白变大神必读资料汇总( 三)
在文章<Python开发.调试.爬虫类工具大全>里面向大家总结了各种实用工具和爬虫技术,今天小编收集了5篇带有实例干货的资料,赶紧来看看吧!另外,喜欢写博客的博主可以申请加工程师博主交流群 ...
- Problem C HDU 5224
Description There is a piece of paper in front of Tom, its length and width are integer. Tom knows t ...
- primitive数据类型
/*primitive数据类型 *primitive主要是用来存储原始的数据 *boolean\byte\short\int\long\double **/public class Shujuleix ...
- git——学习笔记(一)
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/0013745374151782e ...
- 关于doctype
一:html文档类型 doctype为documentype 的简称,是在html页面中声明的XHTML或者HTML的文件类型,正确准确的文件类型的声明,才能使html标签以及CSS样式生效. 声明文 ...
- poj1458
//Accepted 4112 KB 16 ms //最长公共子串 #include <cstdio> #include <cstring> #include <iost ...
- IT人才最容易犯的17个错误--人生警言
转载 记得刚参加工作时(那是97年),中国的IT刚刚兴起,那时,作为一个IT人士是一件很光荣的事,而那时的我正在做电气和电子相关的工作.99年第一次跳槽,进入了IT行业做软件开发.至今,中国的IT已经 ...
- os.system和os.popen
使用os.popen调用test.sh的情况: python调用Shell脚本,有两种方法:os.system(cmd)或os.popen(cmd),前者返回值是脚本的退出状态码,后者的返回值是脚本执 ...