void-man

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

2011年4月21日

摘要: 以前就知道约瑟夫问题是模拟,今天我才发现一些约瑟夫问题可以使用数学解法得出!真是强悍啊!约瑟夫问题真是博大精深!当然报数长度不定的应该只有模拟了吧,能用数学做的都是简化过的约瑟夫问题。下面整理如下:1.问题描述:n个人(编号1~n),从1开始报数,报到m的退出,剩下的人继续从1开始报数。按顺序输出列者编号。数学解法复杂度:O(n)。下面的代码摘自雨中飞燕博客,这个公式推的太牛了,我还没看懂。。。#include <stdio.h>#include <conio.h>int main( void ){ int n, i = 0, m, p; scanf("%d% 阅读全文
posted @ 2011-04-21 23:20 void-man 阅读(17330) 评论(3) 推荐(4)

摘要: 给出两个点,后跟几个字母,一个字母表示一个公司,然后两个点表示此公司连接此俩点最后给出连个点,问你连接的公司有哪些?并且此图是有向图根据问题描述,应该是求全员最短路径问题,目前根据所学的只能用Floyd算法了吧,还有这次不是单纯的floy,否则超时,因此需要剪枝一下此外,floyd算法我一直忽视一个问题就是它竟然跟循环的顺序还有一定关系 for(i to n) for(j to n) for(k to n) if(map[j][i]&&map[i][k])map[j][k]=1 不知道有时候可以通过,有时候就失败,回头总结下原因,此题先上代码吧 1 #include <s 阅读全文
posted @ 2011-04-21 22:31 void-man 阅读(442) 评论(0) 推荐(0)

摘要: 给出一组巨型的高度,问能组成的最大矩形面积是多少策略是首先往右边扫描,记录l[i]为大于第i个高度的最后一个序号然后往右边扫描,记录r[i]是往右边去大于第i个高度的最后一个序号,这样再进行下一个搜索的时候可以省时类似于之前一道 who is front of me的题#include<iostream> using namespace std; int l[100002],r[100002]; long h[100002]; int main() { int n,i,j; long long max,p; while(scanf("%d",&n),n) 阅读全文
posted @ 2011-04-21 13:30 void-man 阅读(224) 评论(0) 推荐(0)