ACM算法
wjsay
白色的蜻蜓,在空中忘记了飞行。
我的 github ID: zzuwenjie
展开
-
之字转换
//碰到一道之字转换的题,想起来以前用C语言写过//#define LOCAL #include#include #define MAXN 100void get_zigzag(int(*a)[MAXN], int ns);int main(){#ifdef LOCALfreopen("data.in","r",stdin);freopen("data.ou原创 2016-09-08 13:56:47 · 186 阅读 · 0 评论 -
浮点数取模
放假啦,数论20 88 44 0 这是整数gcd累不整数求最大公约数,推导浮点数的const double eps = 1e-5;int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b);}double fgcd(double a, double b) { return (b <= eps) ? a原创 2017-07-05 13:00:06 · 523 阅读 · 0 评论 -
最长上升子序列, N*logN,九度OJ 1533,二分+DP
最长上升子序列, N*logN,九度OJ 1533,二分+DP给定n个整数,求最长上升子序列的个数例如 -1,1, 2, 2, 3 的LIS为4 (-1, 1, 2, 3)下面算法参考了《编程之美》和别人的博客。利用了二分查找,优化了一般的O(N^2)的算法,时间复杂度O(N*logN)#define _CRT_SECURE_NO_WARNINGS#include #inc原创 2017-03-29 21:22:49 · 368 阅读 · 0 评论 -
CF The Meeting Place Cannot Be Changed 对时间进行二分
看CF Round403 讨论区里有说对距离进行二分的,二分假设可能的位置,计算所需时间,缩小时间。开始是这样想的,不过没能实现(now)。后来,我总算学会了如何去……算,对时间进行二分,缩小时间至所有人刚好可以到达。对于每一个假设的时间,计算出所有人可达到区间的交集,若有交集,说明时间给多了:反之,少了。不多不少时就是所需的最少时间。B. The Meeting原创 2017-07-26 09:29:10 · 547 阅读 · 0 评论 -
康拓展开
//康拖展开,求一个排列在全排列中的位置,可用于状态压缩,加密,hash值原创 2017-07-05 13:20:43 · 302 阅读 · 0 评论 -
Pillai's arithmetic function 算法实现 --------------------------------附 河南省2017多校联萌5
Pillai's arithmetic function定义:求前n个数分别和n的最大公约数的和。详细见维基百科(下图)那么如何高效求出函数值P(n)呢?且n很大,例如 n := 1:e11。(取10^11是为了秒出结果,因为开方后不超过百万)这个数论问题,具体实现需要用到因数分解,线性素数筛,质因数分解,欧拉函数,也得知道这个公式。1、先因数分解,我算了下,10^11原创 2017-08-25 19:12:55 · 354 阅读 · 0 评论 -
地铁修建。看如何规划
最近又要修地铁,要修的铁路同时开工,最短多长时间可以修完。时间很宝贵呀。无向图,无重边,无自环。求从点1到达点n的所有路的最长边中的最小值。起初竟瞎写写了个深搜,超时,得20分,减枝一下又得5分。后来尝试宽搜得90(代码中有错误),再改改就100了,漫漫调试路。这就是个普通的图中搜索,并不是什么最小生成树,最短路。我只是用了个优先队列,优先搜索边长较小的边到达的节点而已。不超时。为原创 2017-09-04 20:46:36 · 889 阅读 · 0 评论 -
CF854C planning 贪心题,维护堆; 送棵线段树
好像做过类似的题,给你一个数组每次从前k个元素中取出一个最大值(当然数组大小就减1),直到整个数组空。就是维护一个大顶堆,每次从pop()弹出一个值。若还有数组队列还有元素,就push向堆中添加一个元素。直到堆空就可以了。本题小心一下数据相乘时可能会爆int就OK了。Planning#include #include using namespace std;const int原创 2017-09-07 19:56:24 · 339 阅读 · 0 评论 -
树形DP---例题:hdu2196 Computer
树形DP用了分治的思想,先子树后合并。树形DP的特点:每一个父亲的值都是由其各个儿子决定,采取记忆化搜索的形式来实现。That is, 树形DP就是一个后序遍历。给出一个无根树,往往将节点1作为根,把其想象为一棵有根树。HDU2196 computer. 分析:一棵树图,求出每个节点的单向出发所能达到的最远距离,边上权值为长度。背包九讲说:记录每个节点的最长路的次长路及原创 2017-09-01 16:14:40 · 310 阅读 · 0 评论 -
Eqs 源自罗马尼亚2002年信息学竞赛------------五元三次方程求解
Eqs 源自罗马尼亚2002年信息学竞赛------------五元三次方程求解给出POJ链接Cubic Equation发布时间: 2016年9月13日 17:57 最后更新: 2016年9月28日 22:33 时间限制: 1000ms 内存限制: 64M描述考虑如下形式的方程:a*x1^3+b*x2^3+c*x3^3+d*x4^3+e原创 2017-08-28 11:26:28 · 760 阅读 · 0 评论 -
最大公约数 与 异或 UVA GCD XOR 数论小技巧记录
题目:UVA 12716约定a >= b, (a, b) = c. 那么 c a ^ b = c === c a 不能等于 b, 反正法:若a= b, a ^ b = 0. 而 (a, b) = a != 0。不会满足题意的。得知 c 就下来就是暴力枚举因数c, 和 a.时间复杂度O(nlogn)。一次离线处理即可。#include #include原创 2017-07-28 09:25:37 · 912 阅读 · 0 评论 -
数学游戏之乐------给出方案数,求总额&&面额?
游戏大意:给出付款方案数n?问多少钱和多少种面额及这些面额分别是多少,然后付款方案有n种?比如:n = 4。其一解为:付10钱,3种面额(1,2, 5)。这四种方法是(10 dup(1)), ( 5 dup(2)) , (2 dup(5)). dup是重复的意思,汇编中的记法。情况有很多种,给出一种即可。一看就是构造方法。一种简单解法是,不妨假设面额只有两种(1, 2)。三生万物,1原创 2017-10-03 09:59:46 · 245 阅读 · 0 评论 -
挑战密室,第八届河南省省赛,郑大OJ10406
挑战密室,第八届河南省省赛,郑大OJ10406哈哈,下面代码及题意分析:string ele[]数组用来存化学元素,eleM[]用来存分子的相对分子质量,N表示元素的个数,方便拓展,增加元素个数。元素与其相对分子质量绑定在一块,用Map(红黑树,自平衡二叉树)存放(buildBT函数实现),便于在log时间内找到元素的质量。getAim获得化学方程式等号右边第一个化学式。get原创 2017-05-02 14:14:42 · 796 阅读 · 0 评论 -
时过境迁,再看咸鱼
10492: 啊,咸鱼Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 44 Solved: 15[Submit][Status][Web Board]Description从前有座山,山上有座庙,庙里有个老和尚和一个小和尚,有一天,老和尚对小和尚说: 西墙有咸鱼,头齐尾不齐。追星十二载,粉圈未有名。大炮扛不住,写文常死机,原创 2017-03-31 19:18:25 · 594 阅读 · 4 评论 -
递归之整数划分
整数划分问题用递归会重复计算很多次,浪费空间和时间。122的划分情况已经超过了int的表示范围,故不妨开一个二维数组再用两重循环,在O(N^2)的时间内得到结果。 #include <iostream>using namespace std;int divideInteger(int n){ int q[122][122]={0};//q[n][m]在正整数n的...原创 2017-03-08 15:50:46 · 283 阅读 · 0 评论 -
棋盘覆盖(分治算法)
#include using namespace std;/***tr:棋盘左上角行号,tc:棋盘左上角列号*dr:特殊棋子行号, dc:特殊棋子列号*二维数组board表示棋盘,edgeLength = 2^k,棋盘规格2^k * 2^k*cnt 为全局变量*zzuwenjie 2017-3-8 18:25:25**/ const int maxn = (1<<3) + 1原创 2017-03-08 18:25:55 · 419 阅读 · 0 评论 -
玩转二叉树
由二叉树的中序和前序序列,得到原二叉树,并且翻转二叉树,再层次遍历输出。#define _CRT_SECURE_NO_WARNINGS#include #include #include #include #include #include #include #include #include #include using namespace std;const int原创 2017-03-16 15:00:38 · 1432 阅读 · 0 评论 -
递归算法之排列问题
#include #include using namespace std;const int N = 5;/***排列问题,对王晓东的《算法设计与分析》3,做了些改动,加入了一个*const int start,可以决定所有排列从第几个元素开始输入,个人觉得*书上的从0开始输出不好(指的是第17行,若我的代码没有被修改)*zzuwenjie 2017-3-8 14:25:07原创 2017-03-08 14:25:54 · 557 阅读 · 0 评论 -
最长公共子序列,DP,LCS
题目描述:Find a longest common subsequence of two strings.输入:First and second line of each input case contain two strings of lowercase character a…z. There are no spaces before, inside or af原创 2017-03-30 13:05:38 · 400 阅读 · 0 评论 -
查找第k小元素的函数. 分治算法
这个函数最近用了几次,就把它放到我的代码片吧,可以复用在数组arrayNum[p:r]中查找第k(k > 0)个小的元素(下标为p+k-1)int findK(int arrayNum[], int p, int r, int k) { /** *在数组arrayNum[p:r]中查找第k(k > 0)个元素(下标为p+k-1) * p <= r && 0 < k && k <=原创 2017-03-16 22:52:56 · 2582 阅读 · 0 评论 -
分治算法之快速排序
大一大二写的快排#include #include #include #include using namespace std;const int maxn = 1e5+7;int arrayNum[maxn];void myQuickSort(int arrayNum[], int low, int high);int main() { int n; while (~scanf("%d",原创 2017-03-07 14:25:12 · 321 阅读 · 0 评论 -
字典树
1. Trie树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。它有3个基本转载 2017-07-06 10:55:22 · 194 阅读 · 0 评论 -
海量数据处理-BIT Map
转自 http://blog.csdn.net/hguisu/article/details/78802881. Bit Map算法简介 来自于《编程珠玑》。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此在存储空间方面,可以大大节省。2、 Bit转载 2017-07-06 09:06:35 · 299 阅读 · 0 评论 -
copy()减少输出时间
copy()减少输出时间如:要输出一个数组中的n个元素,空格隔开。可以使用copy()将输出缓存到cout()输出流里面,最后一下输出。类似于java中的输入输出流的思想。每次访问设备或外存都是有一定时间代价的。如:从A地送快递到B地。每次printf()相当于每一个物品都要开车从A送到B。而copy()是将输出从到流中,在一次性输出。将物品先装到车里,装满一车或装完了原创 2017-05-05 17:54:56 · 315 阅读 · 0 评论