随笔分类 -  SCAU

摘要:找规律约瑟夫环问题变形。在这个约瑟夫环问题中,固定每次间隔两人,10个人,杀人顺序为2,4,6,8,10,3,7,1,9,最后剩下5定义一种运算J^m(n) 表示 m次嵌套 J( J( J(n) )好像J^2(10) = J(J(10)) = J(5) = 3而m和n的最大值是 10^9这个问题 主要是能快速算出 J(n),不难想到如果能算出J(n),可以暴力地一步一步迭代下去做m次,容容易发现不用做m次,因为J(1) = 1,当n降到1的时候,m再大都没意义了可以发现这个问题是指数递减的,m<=10^9 是个纸老虎同样地可以打表看看J(n)的值,一看就能看到规律对于一个范围的n , [ 阅读全文
posted @ 2013-04-22 00:00 Titanium 阅读(206) 评论(0) 推荐(0)
摘要:数论+打表A的所有因子和位B,B的所有的因子和为A,则称{A,B}是一对ooxx number输入数字n,求出[1,n]里面有多少对ooxx number,其中(A,B),(B,A)这样算作一对n最大为5百万(50000000)hits 220= (1+2+4+71+142) <--- 284,284= (1+2+4+5+10+11+20+22+44+55+110) <--- 220。220 and 280 is a pair of ooxx numberssample input3001300sample output12定义sum[i]=i的因子和,用筛法来构建i枚举因子i.. 阅读全文
posted @ 2013-04-21 23:47 Titanium 阅读(427) 评论(0) 推荐(0)
摘要:DP经典问题,石子合并描述:在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。/*石子合并问题由于石子是未成一圈,所以首先我们要把圆圈剪断变成一条直线,而这样的直线有n条(每个石子都可以作为直线的开头)接下来我们就考虑直线的石子合并问题,这个其实就是矩阵链乘法dp[i][j]=min{ dp[i][k]+dp[k+1][j]+cost } cost为本次合并带来的代价,cost=ai+ai+1+ai+2……aj*/#include 阅读全文
posted @ 2013-02-25 16:31 Titanium 阅读(1122) 评论(0) 推荐(0)
摘要:推荐技术公众号:不爱睡觉的大猪 题意: 描述 Lrc是校队里面的总所周知的全才王,他不仅是一个excelent acmer,也不仅是一个chess master,更是一个crazy game player。 切水果,正是他最喜欢玩的手机游戏之一。为了避免有人没玩过,下面介绍一下Lrc是怎么玩这个游戏 阅读全文
posted @ 2012-12-02 17:21 Titanium 阅读(6115) 评论(0) 推荐(0)
摘要:数论水题,但是因为自己数论比较弱,而且这题也想了半个小时,所以还放上来题意:对于任意一个非负数N,我们定义D(N) 为N上奇数数字的和加上两倍偶数数字的和。举个例子:D(567) = 5 + 6 * 2 + 7 = 24, D(314159) = 3 + 1 + 2 * 4 + 1 + 5 + 9 = 27. 令F(N)表示D(N)的最后一位数字。例如:F(567) = 4, F(314159) = 7。你的问题是,给你两个数A, B,你要计算出∑F(i), i ∈ [A, B]输入格式第一行输入一个整数T,表述有T组case。(T <=1000)接下来T行,每行输入两个数字A, B ( 阅读全文
posted @ 2012-12-02 17:00 Titanium 阅读(469) 评论(0) 推荐(0)
摘要://用中国剩余定理解决韩信点兵问题#include <stdio.h>long long max,x,m[8],b[8],M[8],n,N;int p[8];int main(){ int i,j,k; for(n=1,i=0; i<8; i++) {scanf("%lld",&m[i]); n=n*m[i];} //读入除数数组,注意n,为所以除数的乘积 /***************检验n和m[]数组***************/ //printf("%lld\n",n); //for(i=0; i<8; i++) 阅读全文
posted @ 2012-11-23 19:24 Titanium 阅读(591) 评论(3) 推荐(0)
摘要:裸题,最大子矩阵和,将二维压缩为一维,以行为准,每次枚举一行的和(从i列到j列的和),再对行进行最大子序列和DP求解,时间复杂度为O(N^3)#include <stdio.h>#include <string.h>#define INF -1000000000#define N 110int a[N][N];int sum[N];int n;void input(){ int i,j; scanf("%d",&n); for(i=1; i<=n; i++) for(j=1; j<=n; j++) scanf("%d&q 阅读全文
posted @ 2012-10-26 10:44 Titanium 阅读(171) 评论(0) 推荐(0)
摘要:简单骑士周游问题,BFS,有障碍物,(可能存在无障碍物的情况),起点和终点不会相同,起点终点无障碍物若能从起点出发到终点则输出步数,否者输入不能到达#include <stdio.h>#include <string.h>#include <queue>#define N 70using namespace std;bool g[N][N];int b;int start,end;struct node{ int n,r,c,k;};queue<struct node> q;int BFS(){ int ans,i,k,R[10],C[10],F 阅读全文
posted @ 2012-10-26 10:41 Titanium 阅读(504) 评论(0) 推荐(0)
摘要:其实解释POJ 2533 原题最长上升子序列,用O(N*N)算法和o(n*logn)算法分别实现,学校OJ的数据比较弱,就算写成最长不下降子序列也可以通过,但是在POJ上是WA的而题意本身应该是严格递增的o(N*N)#include <stdio.h>#include <string.h>#define N 10010int a[N];int n;void LOS(){ int dp[N],i,j,tmp,max; memset(dp,0,sizeof(dp)); dp[1]=1; max=1; for(i=2; i<=n; i++) { for(t... 阅读全文
posted @ 2012-10-26 10:37 Titanium 阅读(201) 评论(0) 推荐(0)