nyoj日常小练
黑色的夢
I'm Acmer.
展开
-
nyoj 148 fibonacci数列(二)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=148 矩阵快速幂入门题,身为连线代都没学过的渣渣,为了学矩阵快速幂,还得百度矩阵学习矩阵。。不过矩阵快速幂好强大,之前只知道快速幂取余,没想到过斐波那契数列还可以用快速幂来解。 矩阵快速幂最重要的是根据表达式找出矩阵,比如斐波那契数列为f(n)=f(n-1)+f(n-2) (n>=2)原创 2016-05-07 17:13:33 · 1015 阅读 · 0 评论 -
第九届河南省赛 C nyoj1274 信道安全
1W个点,5W条遍,邻接表+Bellman-Ford的队列优化。仿效啊哈算法P174,175,Bellman-Ford的队列优化. 信道安全 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 Alpha 机构有自己的一套网络系统进行信息传送。情报员 A 位于节点 1,他准备将一份情报 发送给位于节点 n 的情报部门。可是由于最近国际纷争,战事不断,很多信道都有可原创 2016-07-15 16:23:16 · 1241 阅读 · 0 评论 -
第九届河南省赛 A nyoj1272 表达式求值
每年河南省省赛基本上都有表达式求值这类题,对于还没开数据结构这门课的偶来说简单一点的还好,复杂点的就跪了,-_-||| 之前写过计算器,省赛的时候还带了计算器的模板,结果本来想到最后来写,结果最后没时间了。 和计算器类似,不过是多了一个Smax,我的想法是可以将Smax的小括号改成中括号,同时符号里面增加一个’,’,这样区分开来,同样是计算器的写法,中括号的优先级和小括号的优先级一样,逗号的优先原创 2016-06-26 18:21:17 · 651 阅读 · 0 评论 -
nyoj 123 士兵杀敌(四) 插线问点
裸的树状数组插线问点问题, 士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一个人到底有多少军功就是一个比较困难的事情,军师小原创 2016-05-08 17:03:11 · 589 阅读 · 0 评论 -
NYOJ 116 士兵杀敌(二) 树状数组 插点问线
重新写一发, 之前写的太乱了,当求数组某个连续区间的和并不时增加或减小单个数组的值时,利用树状数组可以快速实现,有原本的O(N)->O(log N),大大的节省了时间, 代码:#include<stdio.h>int a[1000000],n,m;int lowbit(int x){ return x&(-x);}void adds(int i,int x){ wh原创 2016-05-08 16:20:30 · 471 阅读 · 0 评论 -
第九届河南省省赛E题 nyoj 1276 机器设备
这道题我的做法和nyoj的20题吝啬的国度有点类似,深搜从(0,0)开始搜直到搜到指定的齿轮位置结束,怎么搜呢?开一个二维vector,首先把所有的齿轮的遍历一遍,搜他们周围和他相切的齿轮,并用vector存起来,这样已知一个齿轮,便可以知道他周围和他相切的所有齿轮,接下来就是从起点(0,0)开始深搜,直到搜到末位置的那个齿轮。 至于轮速,题中给的公式不靠谱,轮速应该是=(0,0)处齿轮的半径*1原创 2016-06-11 19:00:51 · 939 阅读 · 0 评论 -
nyoj 10 skiing 记忆化搜索
本来毫无计划,不知道刷什么题,好多算法都是只知道一点点,入门级别,本来是要刷一道双线dp题,结果学长说我们自己oj就有这道题,唉~自己oj的题都没透,还想去别的oj。。。。。 之前做了一道记忆化搜索的题,学长就建议我把我们oj上的这道滑雪题做一下(学长说滑雪,我莫名其妙的搜了个划水,o(╯□╰)o,老想着划水,)今天刚好想起来了,就把这道题给A了。 本来初看这道题没想法,因为如果想要直接找到结果原创 2016-05-12 23:44:18 · 1080 阅读 · 0 评论 -
nyoj 整数划分(一)(二)
先来谈谈写这两道题的感受,整数划分(一)刚开始做这道题,dp和递归都不会写,是用深搜写的,不过用深搜写整数划分(二)就不行了,铁定超时。昨晚和今晚终于把这两道题的递归和dp全看懂了(看别人博客-_-|||),在这儿重述一下,别人的博客都写得不是太明白,看了好几遍看不懂,自己又手推好几遍,终于懂了。先说整数划分(二)题目:把一个正整数m分成n个正整数的和,有多少种分法?1.递原创 2016-04-14 12:59:26 · 2938 阅读 · 0 评论 -
nyoj 35 表达式求值
之前在oj做过两道表达式求值的题,去年省赛的化学表达式求值,以及前几年的add,max,min表达式求值,由于没学数据结构(..借口),自己用的数组写的(好累)。不过这道题若用数组写,反正我写不出来,也想过用栈来写,但是只想着开一个栈,实现不了,后来看了同学的代码,原来要开两个栈来写,一个存数字,一个存符号。还学到了一个很方便的函数,atof和atoi,头文件是; 表达式求值原创 2016-04-06 16:29:24 · 776 阅读 · 0 评论 -
nyoj221 nyoj756 重建二叉树
nyoj221题目链接 已知二叉树前序中序遍历求二叉树后序遍历:已知二叉树前序中序遍历可重建二叉树,进而遍历后序。#include<stdio.h>#include<string.h>#include<stdlib.h>struct node{ char value; struct node*l,*r;};node *rebuildtree(char *preord原创 2016-09-18 16:36:05 · 458 阅读 · 0 评论 -
nyoj 451 光棍节的快乐
刚做这道题也是一脸懵逼,对于排列问题还是停留在高中的时候,后来才知道原来是错排问题,对于错排问题,百度百科给出了这样的解释:问题: 十本不同的书放在书架上。现重新摆放,使每本书都不在原来放的位置。有几种摆法? 这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错原创 2016-05-24 11:19:22 · 909 阅读 · 0 评论 -
nyoj 61 传纸条(一) nyoj 712探寻宝藏 双线dp
之前自己看到这道题一直想的是按照题意那样先从左上角到到右下角遍历一遍,再从右下角到左上角遍历一遍,可是怎么不走重复的路就不知道怎么解决了。 原来可以开一个四维的数组,来记录对应的状态。可以假设有两个纸条同时从左上角朝右下角走,假设起初第一个纸条朝向起点的右方,第二个纸条朝向起点的下方,假设第一个纸条的位置已知,则第二个纸条肯定始终在第一个纸条的下面的排,因为同时开始传,所以若已知第二个纸条在哪儿一原创 2016-06-07 18:45:51 · 983 阅读 · 0 评论 -
nyoj 1091 还是01背包
先说一下做这道题的感悟,之前把nyoj背包题A的只剩这道题,一看这道题w,v限制那么大,用背包肯定不行,一看n代码贴上:01.#include02.#define max(a,b) a>b?a:b03.long long w[50],v[50],s=0,n,m,shengw[50],shengv[50];04.void dfs(int ci,long l原创 2016-04-12 19:37:50 · 897 阅读 · 0 评论 -
nyoj 228 士兵杀敌(五)
很巧妙的一道题, 一看时间限制线段树也会TLE,就要换种思路了,因为是先更新,更新完毕之后才会询问,所以可以在更新的时候直接将区间最小值对应的数组中加上所需要加的值,区间最大值+1对应的数组减去所需要加的值,然后在全部更新完之后,数组从前到后循环一遍每个数组加上自己以及自己前一项的数组的值,即每个数组对应的值就为更新后的值,题目要询问m-n项的和,那么将每个数组改为第一项到自己的和,询问的时间复杂原创 2016-05-11 18:50:12 · 1034 阅读 · 0 评论 -
nyoj 9 poj 2528 posters
线段树的离散化,因为贴海报的范围是1~1e7,肯定开不了那么大的数组,但是n的范围很小只有1e4,所以可以离散化处理,什么叫做离散化? 百度百科:离散化,把无限空间中无限的个体映射到有限的空间中去,以此提高算法的时空效率。 比如一组数据: 3 10000 100000 10000 20000 20000 100000 心算就能算出来应该是3,我们可以把10000假设成1,100000假原创 2016-05-17 09:47:26 · 617 阅读 · 0 评论 -
nyoj 322 117 求逆序数 归并排序
此题相当于问冒泡从小大大排序中交换了多少次,但是冒泡的时间复杂度的n^2,所以不可取,可以换用归并排序,归并排序时间复杂度为nlogn,还行,之前只听过归并排序的概念(毕竟有sort),没有敲过代码,这次参考别人的博客水一发, 比如现在有两组已经从小到大排好的数据 5 10 15 17和3 9 11 12 30 要将这两组数据整合到一起,同时按从小到大排序 那么可以先比较两组数据的第一个数字原创 2016-05-17 17:51:54 · 495 阅读 · 0 评论 -
nyoj 737 石子合并(一) 区间dp
区间dp,因为只能相邻的相加,所以牵扯到区间dp,即若要求一个大的区间的最优解,先求小区间的最优解然后小区间慢慢的推出大区间的最优解。 比如样例: 5 1 2 3 4 5 要求1~5这个区间,用dp[1][5]来形容1~5的最优值,那么dp[1][5]肯定为dp[1][1]+dp[2][5], dp[1][2]+dp[3][5], dp[1][3]+dp[4][5] ,d[1][4]+原创 2016-05-26 20:12:29 · 1489 阅读 · 0 评论 -
nyoj 760 See LCS again 最长公共子序列
正常dp的最长公共子序列时间复杂度为n*m; 优化后的为nlogn~n*m*log(nm),不是太稳定,不过做这道题时还是可以A的,毕竟数字不是字母,相同的还是很少的; 思路: 如: 5 7 1 2 6 5 4 1 3 2 4 6 6 5 先查找第一个子串在第二个中出现的下标如1(1),2(3) ,6(6,5),5(7),4(4);(注意:下标逆序排列) 然后构成一个新的子串1,3,原创 2016-08-01 10:15:59 · 480 阅读 · 0 评论 -
NYOJ 取石子总结
nyoj的取石子有好多道,除了两道难度为6的,剩下的在这儿简单总结一下结论。 取石子(一) 有一堆石子共有n个,A和B轮流取,A先,每次最少取1个,最多取m个,先取完者胜,A,B足够聪明,问谁先胜? 比较简单的巴什博弈,若n%(m+1)!=0,A胜,否则B胜。取石子(七) n个石子摆成一圈,A和B轮流取,每次可以从中取一个或相原创 2016-04-21 19:31:24 · 8410 阅读 · 0 评论