自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

逐梦者

我本将心向明月,奈何明月照沟渠!

  • 博客(98)
  • 资源 (28)
  • 收藏
  • 关注

原创 湖南2016ACM省赛-A-2016

ACM模版描述A 2016 题目链接……题解很有趣的一道题,迷惑性挺大的,因为2016是2^11-2^5,所以一开始以为和这个有关…… 实际上,和下面这个公式有关: (a * b) % 2016 = (a % 2016) * (b % 2016) % 2016;所以不妨设: a = ka * 2016 + ma; b = kb * 2016 + mb;也就出现了周期性关系。代码#

2016-08-30 18:24:50 3067 16

原创 51Nod-1280-前缀后缀集合

ACM模版描述题解两个数组,一个正序一个倒序,数据结构是map,不断查找匹配就行了,没啥难度,虽然用的两重循环,但是经过剪枝,其实复杂度并不高。代码#include <stdio.h>#include <map>using namespace std;const int MAXN = 5e4 + 10;const int OK = 999;int A[MAXN]; // 正序int B

2016-08-30 13:53:38 725

原创 51Nod-1255-字典序最小的子序列

ACM模版描述题解这道题大致思路不难,但是细节问题颇多,用两种方法解题。第一种,遍历原串,如果答案串中没有则往答案串中插入,如果答案串中第i个等于它,并且该字母往后查有第j个比他小,并且保证i和j之间的字母在原串中依然存在(保证可以被替换掉),则删除第i个,后续向前迁移1,并在结尾处插入该字母。第二种是利用栈原理实现,具体思路注释很清晰,可以仔细研究一下。第二种较第一种效率略微高一些。代码One:#

2016-08-29 18:59:17 3854 1

原创 平衡二叉树

ACM模版构建平衡二叉树#define LH 1#define EH 0#define RH -1// 结点typedef struct BiTNode{ int data; int bf; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;// 右旋void R_Rotate(BiTree *p){

2016-08-29 15:56:56 512

原创 51Nod-1243-排船的问题

ACM模版描述题解万万没想到,这道题用的是二分……对绳子长度进行二分,然后逐个对比,看能否排放下所有船只,绳子长度在0~M-1之间,所以……顺理成章的二分,只是查找的不是v,而是长度为mid的绳子能否拴住所有的船,这里我们用int judge(int d)函数来判断,如果能拴住,则说明最长绳子的长度最短小于等于d,否则大于等于d,可AC……代码#include <iostream>#include

2016-08-28 18:27:19 877 4

原创 51Nod-1205-流水线调度

ACM模版描述题解机器调度问题,这是一个经典问题: 2台机器的情况下有多项式算法(Johnson算法),3台或以上的机器是NP-hard算法。代码#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 5e4 + 5;struct task{ int a;

2016-08-27 17:54:02 1196

原创 51Nod-1202-子序列个数

ACM模版描述题解一道计数DP,递推找规律,可以发现状态转移方程为: dp[i] = (dp[i - 1] * 2 + 1) % MOD; ,该元素首次出现 dp[i] = (dp[i - 1] * 2 - dp[pos[val[i]] - 1] + MOD) % MOD; ,该元素非首次出现pos[val[i]]表示val[i]上一次出现位置,然后减去以该元素为结尾的次数即可。代码#i

2016-08-26 23:57:53 795

原创 51Nod-1191-消灭兔子

ACM模版描述题解一道思路上很水,但是细节需要注意的题。 比较常规的有两种思路,都是贪心算法: 1、从每只兔子考虑,用未被使用的价值最小的箭射死它; 2、从每只箭考虑,杀死未被杀死的血量最大的兔子。这道题可以用优先队列(代码One,第一种思路)做,也可以使用二分(代码Two,第二种思路)。代码One:#include<cstdio>#include<iostream>#include<al

2016-08-26 21:44:53 782

原创 51Nod-1153-选择子序列

ACM模版描述题解一开始想着有O(N)的解法,可是苦思冥想没能想出来,很尴尬…… 最后用排序递归解了,然后又学习了大牛们的高校O(N)解法。这道题的大致意思还真不好讲,我们可以通过样例来理解这道题: 模拟这道题,可以发现,最开始我们会选取12和10, 9 10 2 -1 3 -5 0 -3 1 12 5 8 -2 6 4接着,我们会选取的一定是3(一定在10和12之间),那么我们不难发现,

2016-08-25 03:33:07 946 1

原创 51Nod-1112-KGold

ACM模版描述题解做到这道题,一开始只考虑到了内存问题,而忽略了时间,所以用的优先队列存储,结果A了一半数据T了一半数据,代码One。然后看到一个初二小哥的代码,真的挺棒,总体思想是计算两条直线相交。 可以用二分搜索查找到第10000次超越发生在什么时刻。当然,这个判断函数很好写,就计算当前每一个人的金钱量,然后排序计算就行了。 首先以y轴为时间,x轴为金钱,之后就可以通过计算两条直线的交点来判

2016-08-24 18:47:27 864 2

原创 51Nod-1109-01组成的N的倍数

ACM模版描述题解这里只强调了M>0,而没有提其上限,那么只有一种可能,就是M极大,会远远超出long long,所以我们这里需要用到BFS求出其最小的M,但是需要输出M,所以需要结合DFS输出。这里可以进行一下剪枝,定义一个vis数组用来存储余数状态,如果某一个余数出现过了,那么第二次出现时可以直接剪去,因为当一个余数出现了两次,说明这种前缀延伸出来的结果无意义(不是最小的M)。代码#includ

2016-08-22 14:19:20 1566 1

原创 51Nod-1107-斜率小于0的连线数量

ACM模版描述题解常规解法是逆序数(也可以使用树状数组解),注意横坐标相等的情况。代码One:#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int MAXN = 5e4 + 10;long long ans = 0;struct line{ int x; int

2016-08-20 19:20:56 714

原创 51Nod-1105-第K大的数

ACM模版描述题解这里使用二分套二分查找即可。一般的二分查找是通过下标范围查找,而二分套二分是为了求两个数组组合乘积的问题,查找第K大的值,这里我们需要通过数据的范围查找,而不是下标的范围,这里需要两次快排。需要强调的一点是数据范围问题!!!一定要使用long long型,避免数据溢出!!!代码#include <iostream>#include <algorithm>#include <cs

2016-08-20 01:43:46 1313 4

原创 51Nod-1103-N的倍数

ACM模版描述题解利用抽屉原理解题。把前缀和求出并对N取模,任意等于0则符合要求,或者任意两个sum[i]=sum[j],则[i,j]内的数的和都满足这个条件。N个数对N取模,相当于N个抽屉,则至少有一个sum[i]等于0,或者一对儿sum[i]==sum[j](可以理解为sum[i]-sum[j]==0)。这是一道特判题,可能有多种解,所以即使输出结果和样例不同,仍然是可以AC的,之前因为没有关注

2016-08-19 19:16:06 1113

原创 51Nod-1093-骆驼和香蕉

ACM模版描述题解这里举一个简单的样例,输入72 51,输出122。 先给出图示: 通过图示可以看出,每一段路得经过次数依次为1、3、5、7……,所以,保证每一个中转站之间的距离和它途径的次数有关,关系很明显……此例是K+K/3+X*5,X是最后剩余的不足够大的路段。注意精度问题,要求进一。代码#include <iostream>using namespace std;int main(i

2016-08-19 16:11:33 990

原创 51Nod-1076-2条不相交的路径

ACM模版描述题解边双连通问题,使用Tarjan算法可以KO.。代码#include <iostream>#include <algorithm>#include <cstdio>#include <vector>#include <cstring>using namespace std;const int MAXN = 5e4 + 10;int stack[MAXN]; // 每遍

2016-08-17 21:54:32 1340 1

原创 51Nod-1060-最复杂的数

ACM模版描述题解百度百科: 对于任何正整数x,其约数的个数记做g(x).例如g(1)=1,g(6)=4.如果某个正整数x满足:对于任意i(0代码#include <iostream>typedef long long ll;using namespace std;const int MAXP = 16;const int prime[MAXP] = {2, 3, 5, 7, 11, 13,

2016-08-17 01:35:17 1817 6

原创 反素数

ACM模版求最小的因子个数为n个正整数typedef unsigned long long ULL;const ULL INF = ~0ULL;const int MAXP = 16;int prime[MAXP] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53};int n;ULL ans;void dfs(int d

2016-08-17 01:27:04 1665 8

原创 51Nod-1640-天气晴朗的魔法

ACM模版描述题解这道题如果看清楚题意,那其实思路很容易想起来。分析题意可以得知,答案要求满足两个条件: 第一优先条件是,生成的树的最大边权必须最小; 第二优先条件是,生成树的总权值和要求最大。 分析第一个条件,我们需要使用Kruskal_0来求最小生成树,并且记录下来该种情况下,最大的边权MAXW; 接着分析第二个条件,我们顺理成章的可以想到最大生成树,但是这个最大生成树的边不能大于MAX

2016-08-16 23:15:49 895 2

原创 51Nod-1639-绑鞋带

ACM模版描述题解组合数学,找出递推式即可。 考虑n根鞋带时的第一个操作,只要不选择同一根鞋带即可,变相等价于n-1根时的情况。这样,我们可以递推求解。 假设已经有i-1根鞋带组成一个环,用ans[i-1]表示其概率,那么将第i根鞋带插入前边的i-1根鞋带的方案数为2*(i-1),这里乘以2是因为鞋带两头都可以插入,那么所有的情况(插成环的情况+不插成环的情况)为2*(i-1)+1,那么公式即为

2016-08-16 20:25:56 358

原创 51Nod-1632-B君的连通

ACM模版描述题解拿到这道题,很容易发现,有效的数据只有n,其他的连通都是烟雾弹,毕竟保证是一颗树。想到这里,知道是需要找规律推公式,可是半天没能推出公式,然后参考了一些大神的思路……因为每炸毁一条边就多出一个连通图,所以最优是一个连通,最差是n个连通。选择一条边的概率是1/2,选择n条边就是1/2^(n-1),那么最后题目要求乘以2^(n-1),所以抵消了。 那么公式原型就是: 1+2∗C(

2016-08-16 17:15:53 920

原创 51Nod-1631-小鲨鱼在51Nod小学

ACM模版描述题解暴力解题就能通过,数据比较水,感觉我的代码有些麻烦,有很大的优化空间。这里要说的是,其实年月日可以转化为一个独有的序号转存,这个序号依然保持原来日期的对比关系。 比如说,将2001年1月1日存为:2001101,(2001*1000 + 1 * 100 + 1),这样子,两个日期间的对比关系用此序号对比依然成立。也可以使用<set>集合优化。代码#include <iostrea

2016-08-16 01:59:04 764

原创 51Nod-1625-夹克爷发红包

ACM模版描述题解做这道题,有些懵逼了我,因为一开始使用的方法是纯粹的贪心,但是偏偏有一组数据挂掉了,傻傻A不过去…… 这个解法,是将行和列并在一起贪心,可能是因为行和列数据交叉,产生了后效应性,所以有的数据会挂掉。然后,采用的枚举加贪心AC了。 因为行数最大为10,所以可以先枚举行,撑死了1024种状态,所以是可行的,然后列进行贪心,保证高级红包组数不超过k即可,最后取最大红包总和,这样子写就

2016-08-16 00:37:36 1031

原创 51Nod-1483-化学变换

ACM模版描述题解枚举暴力解题即可。枚举每一个数可能产生的数,并且记录产生该数的步数,最后取最少的总步数。代码#include <iostream>#include <cstring>using namespace std;const int MAXN = 1e5 + 10;const int INF = 0x3f3f3f3f;int num[MAXN];int sum[MAXN];int

2016-08-15 19:01:37 499 3

原创 51Nod-1475-建设国家

ACM模版描述题解第一感觉,这道题很像最高的奖励这道题的思路,只是不能用优先队列神马的简单维护。今天花了些许时间A掉了它,细节繁多,关键是两点,第一:最右端点可以连接两个城市,第二:可以在规定时间内往返首都的城市的选与不选。 针对这两个问题,首先进行排序,将hi从大到小排列,然后开始遍历生成temp_1与temp_2(代码中使用的是temp_0),分别表示两种排放位置。 然后遍历temp_2与t

2016-08-15 16:39:57 712

原创 51Nod-1418-放球游戏

ACM模版描述题解一道模拟题,AC率之高,令人发指,但是并不是说明这道题很水,毕竟A它的人数基数不大。这里根据题意,需要额外考虑的是当球的个数是1个或者2个时,结果分别是0和1,然后,就需要考虑球放的位置了,当然,这其实是一个烟雾弹,我们只需要每次都尽量往中间放,使两边的球色最杂,这时,就要考虑到每种颜色球的个数了,如果某种颜色球只有一个,那么它只能提供1有效分;如果是0个,那么一分也提供不了;但是

2016-08-15 02:27:51 551

原创 51Nod-1086-背包问题 V2

ACM模版描述题解这里提供三种代码,前两种方法一致,复杂度O(V*Σlog n[i]),不同的是,第二个是模版;第三种代码最优,复杂度为O(VN),可惜十分不好理解,具体推导过程不再赘述,有些懵懵懂懂……这个问题是一道常见的多重背包问题,和完全背包相似,可以转化为01背包问题,但是转化过程中,不能简单的将第i种拆分成ci[i]个物品,要利用一些数学知识来优化,应拆分为1、2、4……c[i]-sum种

2016-08-15 01:40:49 738

原创 背包相关

ACM模版背包相关const int MAXN = 101;const int SIZE = 50001;int dp[SIZE];int volume[MAXN], value[MAXN], c[MAXN];int n, v; // 总物品数,背包容量// 01背包void ZeroOnepark(int val, int vol){ for (int j

2016-08-15 01:29:21 1647

原创 51Nod-1113-矩阵快速幂

ACM模版描述题解模版题,矩阵快速幂,很直白的一道题。需要好好研究一下矩阵的知识了……代码#include <iostream>using namespace std;#define MAXN 111#define mod(x) ((x) % MOD)#define MOD 1000000007#define LL long longint n;struct mat{ int m[M

2016-08-13 22:50:08 888

原创 矩阵相关

ACM模版矩阵乘法/* * 矩阵乘法 n*n矩阵乘法 */#define MAXN 111#define mod(x) ((x) % MOD)#define MOD 1000000007#define LL long longint n;struct mat{ int m[MAXN][MAXN];};// 矩阵乘法mat operator * (mat a, mat b

2016-08-13 22:39:00 1660

原创 51Nod-1179-最大的最大公约数

ACM模版描述题解由于正整数的上限为1e6,不是太大,所以,可以开一个一百万的数组,用来存储正整数出现的次数,并且记录下最大的正整数MAXA,MAXA是可能的最大公约数的上限,然后从MAXA到1开始检索,当检索到cnt大于等于2时,说明这个数是最大公约数。代码#include <iostream>#include <cstring>#include <cstdio>using namespace

2016-08-13 20:16:50 669

原创 51Nod-1186-质数检测 V2

ACM模版描述题解伪随机素数检测,Miller-Rabin算法,如果用Java神马的有大数相关类型的话,就是一个模版题,套用一下这个算法模版就好了,然而如果用C++,那么这道题足够惨痛了,Miller-Rabin算法+大数算法……有点儿料!!!代码#include <cstdio>#include <cstring>#include <cstdlib>#define MAXL 4#define

2016-08-13 18:27:46 1253 1

原创 51Nod-1416-两点

ACM模版描述 题解深度优先搜索,这里需要强调的是,不要归置状态,只要访问过就标记为1,另外需要设置一个tag标签,标记上一步,防止下一步与上一步重合。当访问的下一步所访问的点已经被访问过,说明形成了环。代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXMN = 55

2016-08-13 03:26:51 893 2

原创 51Nod-1414-冰雕

ACM模版描述题解一开始高估了这道题难度,一直在想从中发现规律( ̄┰ ̄*),结果,╮(╯_╰)╭,只好暴力解之……还真的过了,这里给出一种一般的暴力解法和一种略微优化的暴力解题思路。代码One:// 常规暴力解法#include <iostream>#include <cstdio>using namespace std;const int MAXN = 2e4 + 10;int T[MAXN

2016-08-13 02:15:35 361

原创 51Nod-1402-最大值

ACM模版描述题解一开始看到这道题,感觉挺简单的,但是,我只关注了明沟,却忽略了暗坑!!! 首先,这里我们将这些特殊点成为卡点,但是不是所有的卡点都能卡住数据的,其中,最容易想到的是t < x - 1的点是无法卡住数据的,所以我们可以直接忽略掉,那么剩下的卡点一定是可以卡住数据的,但是这时候筛选出来的卡点其中有两种情况并无法精准的卡住数据,即: T[i] > T[i - 1] + X[i] -

2016-08-13 01:01:45 448

原创 51Nod-1396-还是01串

ACM模版描述题解水题一道,将前i个字符中0和1的个数分别存一下,最后对比即可。代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 1e6 + 10;char S[MAXN];int S_0[MAXN];int S_1[MAXN];int main(int a

2016-08-12 14:54:21 602 4

原创 51Nod-1393-0和1相等串

ACM模版描述题解前缀和+Hash记录,复杂度为O(N)。这里需要强调的是要考虑到01这种最长的情况是打头开始的串,所以需要对dif[MAXN] = 0;初始化。代码#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 1e6 + 10;const int INF =

2016-08-12 14:26:03 444

原创 51Nod-1352-集合计数

ACM模版描述题解使用常规思路枚举的话一定会超时,这里需要用到扩展欧几里得算法求满足Ax + By = N + 1的方程大于0的最小值和A、B的最小公倍数,最后分析res可以拆解出来多少个C(最小公倍数)。代码#include <iostream>#include <cstdio>typedef long long ll;using namespace std;ll N, A, B;ll x,

2016-08-12 01:14:10 807

原创 51Nod-1285-山峰和分段

ACM模版描述题解这里需要强调的是,峰如果被分割,依然算峰,所以,首先需要对点数据进行峰数据检索,然后处理得到一个pre数组用来存储前i个点数据中有几个峰。当然,我们最多分的段数受峰个数控制。代码#include <iostream>#include <cstdio>using namespace std;const int MAXN = 5e4 + 10;// const int INF =

2016-08-11 23:52:34 726

原创 51Nod-1276-岛屿的数量

ACM模版描述题解先将岛屿和指令全部排序,然后过一遍指令,不断修正岛屿状态,将每条指令的结果转存一下,最后整体输出即可。复杂度Qlog(Q) + Nlog(N)……代码#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>using namespace std;const int MAXN = 5e4

2016-08-11 22:20:39 565

EMACS 编辑器入门

EMACS 编辑器入门 pdf

2018-05-26

ACM 国际大学生程序设计竞赛-算法与实现

ACM 国际大学生程序设计竞赛-算法与实现 pdf

2018-05-26

一站式学习 C 编程

一站式学习 C 编程 pdf

2018-05-26

算法设计与分析(第2版)

算法设计与分析(第2版)pdf

2018-05-26

设计模式:可复用面向对象的基础

设计模式:可复用面向对象软件的基础.pdf

2018-05-26

移动机器人调研报告

移动机器人调研报告.doc

2018-05-26

软件工程调研报告

近期对软件工程进行了一次小小的调研,写了这份软件工程调研报告,也许存在一些问题,欢迎大佬们指点。欢迎━(*`∀´*)ノ亻!

2018-05-26

软件工程讲义-软件工程电子书 PPT

软件工程讲义-软件工程电子书 PPT

2018-05-26

NOI 知识点

某中学 NOI 教练总结的,发给我学习,分享给大家,总结的还算是可以的。

2018-05-26

尼姆博弈 PPT

感觉挺不错的一个 PPT,适合入门看看,高手绕行。

2018-05-26

动态规划 PPT

姜太公钓鱼愿者上钩,我也不知道这个资源如何,所以酌情下载。

2018-05-26

C语言趣味程序设计编程百例精解

姜太公钓鱼愿者上钩,我也不知道这个资源如何,所以酌情下载。

2018-05-26

九种排序算法

九种排序算法!!!C 语言版的~~~希望对您有所帮助。(#^.^#)

2018-05-26

OI国家集训队论文集1999~2016

1999 年到 2016 年的一些 OI 国家集训队论文,比较多,慢慢啃吧!!!

2018-05-20

佐理慧学姐的数论总结

佐学姐分享的资源总结,挺不错的,可以好好看看。强势推荐~~~

2017-11-02

ACM模板-f_zyj 更新(内含 v 1.1 和 v 2.1 的 .pages 格式和 .pdf 格式)

总是有朋友问我啥时候更新一下自己的模板,我一直拖着没有更新,因为一次更新的时间花费太高了,我一直都想再等等,再等等就更新,可是现在大概是等不了了,快要退役了,这大概是最后一次更新了吧?希望对大家有用。

2017-09-21

十五个经典算法

十五个经典算法的深度剖析。

2016-12-05

经典算法大全

经典的算法问题。

2016-12-05

完全图匹配

完全图匹配数目。

2016-12-05

STL基础教程

一个全面的STL基础教程~~~

2016-12-05

ACM模板-f_zyj

事有烦而不可省,费而不得已,盖此为也!!!

2016-12-05

博弈论之巴什游戏

一个很好地博弈论讲义,希望对大家有所帮助。

2016-07-28

博弈论之威佐夫游戏

一个很好地博弈论讲义,希望对大家有所帮助。

2016-07-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除