上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 32 下一页
摘要: 数学题:给你一个区间[a,b]在该区间内有多少个费波那列数(包括a,b),数据规模达到10^100。这题的原理很简单,基本没什么算法,其实更偏重于编程能力,需要用到高精度。另外找区间的地方要小心1.先把长度在100以内的fibs先找出来并保存,再开始输入case2.得到区间[a,b],那么在保存下来的fibs里找到 第一个f[p],要满足a<=f[p] , 然后继续找下去,找到 第一个f[q],满足b<=f[q]其中f[q]还要处理一下,如果b=f[q],那么f[q]显然在区间内 ; b<f[q],那说明f[q]并不在区间内,由于是第一个所以可以知道f[q-1]一定要区间内而 阅读全文
posted @ 2013-01-22 22:48 Titanium 阅读(429) 评论(0) 推荐(0) 编辑
摘要: 数学题(找规律题)题意:给你骑士的攻击范围,给你一个r行c列的棋盘,问怎么放能放最多的骑士而且任意骑士间不会相互攻击r行c列和c行r列是相同的,所以我们在计算的时候,先转换使 行<=列 ,这样方便计算当1行是,整行都能放完当2行时,放满一个田字,隔一个田字……大于两行时,每行都是隔着放——第奇数行从第一个开始,第偶数行从第二个开始这题以前做过简易版的,选成这个也差不多,不过以前没有思考过1行的特殊情况,也没有详细思考2行的特殊情况#include <cstdio>#include <cstring>int main(){ int r,c,n,m,ans; whil 阅读全文
posted @ 2013-01-22 20:54 Titanium 阅读(471) 评论(0) 推荐(0) 编辑
摘要: 数学题题意很好懂,就不解释。这个代码写得不好,主要是自己想复杂了感觉,或者还没有找到最本质的规律,举个例子来说明思路23 ,456781. 处理为30 ,45670 ,另外的部分就单独计算得到是78,接着就是(45670-30)/10*45=2053802.变为3 ,4567,处理为10,4560,另外的部分单独计算为70,接着就是(4560-10)/10*45=204753.变为1,456,处理为10,450,另外的部分单独计算为66,接着就是(450-10)/10*45=19804.变为1,45,处理为10,40,另外的部分单独计算为60,接着就是(40-10)/10*45=1355.变为 阅读全文
posted @ 2013-01-22 18:32 Titanium 阅读(447) 评论(0) 推荐(0) 编辑
摘要: DP+高精度+滚动数组还是1009的题目,不过数据再大点,数组都开不下,需要滚动数组。回想1009的递推的方式,可以看到,要知道当前位的信息,只需要知道前一位的信息即可,所以其实任何时候都只需要两位,所以我们可能用户滚动数组,不断替换,而算法思想是完全不变的//用递推来实现,要得到当前位的信息只与前一位有关,因为用滚动数组,只保存两位,不断滚动//dp[0][]表示前一位的信息,dp[1][]表示当前位的信息,每一位的数字只能为0和非0#include <cstdio>#include <cstring>#define MAX 1900 //位数#define LEN 阅读全文
posted @ 2013-01-21 20:54 Titanium 阅读(389) 评论(0) 推荐(0) 编辑
摘要: DP+高精度 (和1009是一样的题目,不过数字的位数达到了180,所以要用高精度)同样是记忆化搜索实现,不过加入了高精度,一些细节地方就注意一下。我的代码写的不好,有点长有点乱…………#include <cstdio>#include <cstring>#define LEN 210 //高精度数组的大小#define MAX 210 //位数struct num{ int a[LEN],len; //a数组保存高精度}dp[MAX][15]; //最多180位,最高进制为10int N,K;void init(){ for(int i=1; i<N; i++) 阅读全文
posted @ 2013-01-21 17:40 Titanium 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 数论题题意:有无限的水供应,另外有AB两个杯子,他们有容量,分别为ca和cb,满足0<ca<=cb,并且ca和cb互质一开始两个杯子都没有水。一种操作是,你能往一个杯子加水,但必须把这个杯子加满,一种操作是倒水,但一定要把水倒空,一种操作是把一个杯子的水倒给另一个杯子,但要求是至少使一个杯子为空或者另一个杯子。现在给你一个数字n,n<=cb,现在的任务是使B杯的水量为n,至于A杯的水量是多少都行,问你要怎么做。这题对于一个case其实有多种答案,不过题目对于输出并没有要求并没有需要优化,任意一组可行解即可这题一开始没有头绪,从推理的角度来看这题,但是一直找不到出路。题目归类在 阅读全文
posted @ 2013-01-21 13:08 Titanium 阅读(364) 评论(0) 推荐(0) 编辑
摘要: DP,最大子矩阵和:先按列压缩为一维i,在用最大连续子序列和来求。在枚举列压缩求和的时候,为了提高速度,可以在输入的时候先保存下来,就不用每次都去计算,不过再代码中没有写另外这题不允许空矩阵,即至少要有一个元素,所以代码要做稍微的修改,就这样WA了几次/*最大子矩阵和,先压缩为一维再求最大子序列和,时间复杂度O(n^3)*/#include <cstdio>#include <cstring>#define N 1100#define INF 0x3f3f3f3fint a[N][N],s[N],n;void get_sum(int x ,int y){ for(int 阅读全文
posted @ 2013-01-21 12:02 Titanium 阅读(335) 评论(0) 推荐(0) 编辑
摘要: DP(网格DP+空间压缩)题意:给你一个网格,最左下角下标为(0,0),最右上角坐标(N,M),每个格子都是100*100的正方形,从当前点可以向上下左右4个方向移动,如果恰好当前点有对角线,还可以向对角线移动。另外给你K个坐标,表示那些方格有对角线,这些坐标是方格的右上角的坐标,好像(50,50),其实就是(49,49)和(50,50)有斜线连接,(34,67)其实就是(33,66)和(34,67)有连接。现在问你从(0,0)到(N,M)的最短距离,结果四舍五入为整数DP思想还是很简单的,但是要压缩空间否则会MLE。先说说一开始的思路1.首先,从当前出发,不可能向左或者向下或者向左下走,只可 阅读全文
posted @ 2013-01-20 15:30 Titanium 阅读(547) 评论(0) 推荐(0) 编辑
摘要: DP(记忆化搜索)第一次在Ural做题,所以选个简单的DP,无奈变量写错WA了两次,终于AC了题意:输入n和k,表示一个n位的k进制数,这个数字要符合两个条件,没有前导0(否则怎么算是n位数呢?),不能有两个或以上连续的0,问你一共有多少个这样的n位的k进制数这题,最直观的方法就是dfs,不断枚举,枚举到第n层就功德圆满了,然后再判断这个n位数是否符合我们的要求。但是可想而知是会超时的,那么怎么优化呢?第一,当前位的数字决定了下一位能出现什么数字,如果当前位非0,那么下一位[0,k-1]都可以,如果当前位为0则下一位[1,k-1],这样就可以在枚举的过程中避免掉两个连续的0的情况但是这个优化不 阅读全文
posted @ 2013-01-19 22:57 Titanium 阅读(939) 评论(0) 推荐(0) 编辑
摘要: 模运算及其性质本文以c++语言为载体,对基本的模运算应用进行了分析和程序设计,以理论和实际相结合的方法向大家介绍模运算的基本应用。。基本理论基本概念:给定一个正整数p,任意一个整数n,一定存在等式 n = kp + r ;其中k、r是整数,且 0 ≤ r < p,称呼k为n除以p的商,r为n除以p的余数。对于正整数p和整数a,b,定义如下运算:取模运算:a % p(或a mod p),表示a除以p的余数。模p加法:(a + b) % p ,其结果是a+b算术和除以p的余数,也就是说,(a+b) = kp +r,则(a + b) % p = r。模p减法:(a-b) % p ,其结果是a- 阅读全文
posted @ 2013-01-19 20:07 Titanium 阅读(297) 评论(0) 推荐(0) 编辑
上一页 1 ··· 15 16 17 18 19 20 21 22 23 ··· 32 下一页