上一页 1 2 3 4 5 6 7 ··· 9 下一页
摘要: For example, 4139 is a balanced number with pivot fixed at 3. The torqueses are 4*2 + 1*1 = 9 and 9*1 = 9, for left part and right part, respectively. It's your job to calculate the number of balanced numbers in a given range [x, y].思路:枚举中心轴的位置,然后针对这个位置,算出结果,结果记得去掉全0的情况。View Code 1 #include<i 阅读全文
posted @ 2013-05-07 22:48 诺小J 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 如果这个数要被自己的每个数位上的数整除,那么这个数一定能被每个数位上的最小公倍数整除。那么剩下的就是用记忆话搜索和枚举来解题了。View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 typedef long long LL; 7 int const M = 55; 8 int const N = 20; 9 int const MOD= 2520;10 LL l,r;11 阅读全文
posted @ 2013-05-07 17:30 诺小J 阅读(145) 评论(0) 推荐(0) 编辑
摘要: windy定义了一种windy数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 解题思路:简单枚举+记忆化搜索View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #include<cmath> 6 using std::cout; 7 using std::endl; 8 typedef long long LL; 阅读全文
posted @ 2013-05-07 13:55 诺小J 阅读(141) 评论(0) 推荐(0) 编辑
摘要: dp[i][3],其中i表示位数,后面的3表示有三种数 0:首位不带9的合法数 1:首位带9的合法数 2:不合法数View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 typedef long long LL; 6 int const N = 20; 7 LL dp[N][3],n,pow10[20];//0合法的数字个数 1以9开头的合法数字 2不合法的数字 8 int bit[N],t; 9 void pre()1 阅读全文
posted @ 2013-05-06 22:22 诺小J 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 吉哥他生平最恨情人节,不管是214还是77,他都讨厌! 吉哥观察了214和77这两个数,发现: 2+1+4=7 7+7=7*2 77=7*11 最终,他发现原来这一切归根到底都是因为和7有关!所以,他现在甚至讨厌一切和7有关的数! 什么样的数和7有关呢? 如果一个整数符合下面3个条件之一,那么我们就说这个整数和7有关—— 1、整数中某一位是7; 2、整数的每一位加起来的和是7的整数倍; 3、这个整数是7的整数倍; 现在问题来了:吉哥想知道在一定区间内和7无关的数字的平方和。解题思路:如果确定了一个数字x,然后确定要在最高位添加一个i的数字,那么此时该数字等于(10^X的位... 阅读全文
posted @ 2013-05-06 18:37 诺小J 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 说实在的,有点惭愧,这题,本来想用更好的办法,但是时间复杂度更高了。朴素的办法就是打表,从1-1000000打一个统计1-n中的合格数的表。递归枚举其中的数字:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 using namespace std; 6 int const N = 20; 7 int l,r,n,m,num,sl[N],sr[N]; 8 int pow10[8],sl2[N],sr2[N]; 9 阅读全文
posted @ 2013-05-04 18:27 诺小J 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 题意:有一位售票员现在要将手中的一系列连续的票卖给客人,而且是卖出连续的票给客人,而现在卖出的票的编号的数位之和不能小于k这个正整数,求按照这样的规则我能售票给多少位乘客。算法合集之《浅谈数位类统计问题》当中就讲到过,要我们以进制叉树的形式来具象化所有的数的情况。我们就是要找出l到r中的连续数超过k的组数,尽可能的多。但是现在关于合并子树的问题就是,其中有一部分客人手机的票超过了k,并找有一部分超过k的部分,那么这就使得我们再累加子树的时候添加了困难的地方。现在引入一个dp的思想,说实话此类的问题这样的思想还是比较先进的,就是难得想到。Dp[i][j][m]其中有co,rest两个值,其中表示 阅读全文
posted @ 2013-05-04 13:22 诺小J 阅读(506) 评论(0) 推荐(0) 编辑
摘要: 将0,1, 2^k-1这些数分成M份,每份的值为该份的1的数字之和,求使最大的那一份最小K<=100,M<=100最大值最小化,二分的经典应用思路:二分这个最大值X,然后看能不能组成M份,然后再调整Cal(x):求出0-x这些数字当中1出现的次数。 其实实际分析一下就很简单,把x化作是二进制的数,那么从高位往低位走,遇见一个1,假使这个位置在i位置,那么答案ans=ans+F[i-1]+j*2^(i-1)+1,其中j表示的是到现在位置所遇见的1的个数,F[i]表示的是0-2^i-1中所出现的1的个数,然后再加上之前出现的1的个数乘以该位出现1所经历的次数,再加上这个位置上自己出现的 阅读全文
posted @ 2013-04-29 12:31 诺小J 阅读(448) 评论(0) 推荐(0) 编辑
摘要: 刚开始的时候有点想法,但是没有具体,主要是一开始题目看错了,认为给的这一段区间可能包含了正数和负数,该打,题目都可以看错,一直以来的经验教训都没有吸取。代码中去掉最高位的方法还是相当的不错的,至于以后二进制的变形,应该都可以参考这其中的技巧。代码:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 typedef long long LL; 6 int const N = 40; 7 int f[N][N],n,m, 阅读全文
posted @ 2013-04-25 16:29 诺小J 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 看《浅谈数位类统计问题》论文写的,感觉分析还是相当的到位啊。一个数分解成进制数相加,该位置上的数绝对为1.代码:View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 using std::min; 6 using std::swap; 7 int const N = 40; 8 int f[N][N],num[N],top,x,y,b,k,s,tot; 9 void pre()10 {11 f[0][0]=1;12 f 阅读全文
posted @ 2013-04-25 12:13 诺小J 阅读(159) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 ··· 9 下一页