- 博客(39)
- 资源 (1)
- 收藏
- 关注
原创 组合数的逆元求法
#include <bits/stdc++.h>#define ll long longusing namespace std;const ll mod=1e9+7;const int maxn=1e5+7;ll fac[maxn];ll inv[maxn];ll C(int m,int n){ if(m>n) return -1; ...
2018-08-15 09:10:16
1376
原创 并查集模板(可直接用)
#include <bits/stdc++.h>using namespace std;const int maxn=1e5+7;int pre[maxn];int Find(int x){ int p,tmp; p=x; while(x!=pre[x]) x=pre[x]; while(p!=x) { ...
2018-08-12 15:30:25
5581
2
原创 中国剩余定理(不互质版)
中国剩余定理...有点难懂呀,还是记一下模板好了 刚好接触到一道模板题,是在hdu上的 3579中国剩余定理(不互质)模板题暂时先把模板放在这里,等什么时候理解了中国剩余定理再回来写理解吧,目前还是就学着用一下模板吧///不互质的中国剩余定理///HDU3579亲测AC#include <iostream>#include <cstdio>...
2018-08-09 10:58:46
1337
原创 唯一分解定理
不是最优的做法,就是简单的去除然后再判断,时间上面会有点慢,但是可以有所改进下面是代码实现#include <bits/stdc++.h>using namespace std;///时间复杂度有待优化,在div的那个for循环中时间复杂度为O(sqrtn)///优化可以先用筛法求出素数的个数,再去对素数进行循环vector<int> factorS...
2018-08-08 10:44:46
332
原创 欧几里德与扩展欧几里德
欧几里德算法是辗转相除法的实现,辗转相除法的关键在于gcd(a,b)=gcd(b,a%b) 它和它的边界条件gcd(a,0)=a构成了以下代码。因为lcm*gcd=a*b,所以求出两个数字的最大公因子就可以求出它们的最小公倍数#include <iostream>#define ll long longusing namespace std;ll gcd(ll a...
2018-08-08 09:37:29
296
原创 Ascending Rating
链接: 题目链接思路: 用单调队列来进行优化,在此复习一下什么是单调队列,单调队列里面存放的是一段区间里面按某种关系排列的单调序列,下面就以单调递减为例进行说明,在往单调队列里面添加元素的时候,如果队列的队尾比添加的元素要小得话,那就把队尾元素弹出,一直到队列为空或者队尾元素大于要添加的元素,再将要添加的元素添加进这个单调队列,原则就是,越晚添加的元素越有用,这样可以在O(...
2018-08-01 08:47:47
204
原创 Polyline Simplification
题意: 给你n+1个点,组成n条边,连续的三个点之间可以构成一个三角形,现在要求你删去其中的某些点,删点的规则是删去三角形面积最小的那个三角形中间的点,直到最后剩下m+1个点。连接: CSU-2116传送门思路: 对于每一个点,除了端点外,维护它们的三角形的面积的最小值,以及它所对应的左边相邻的点与右边相邻的点,使用优先队列对面积进行从小到大排序,每次删掉一个点,需要...
2018-07-30 08:17:06
270
原创 统计难题(字典树模板题)
题意: Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀),这个题意还是很好理解的,输入方面稍微有一点点坑,但是习惯就好 = = 判断读入的是不是一串空得字符串,可以用gets()函数去实现,可以通过读入的字符串是不是为空判断。链接: HDU 1251传送门...
2018-07-29 09:22:14
1548
原创 Big Event in HDU
题意:有N种物品,每种物品都对应一个M值,表示该物品有M件。要将这些物品能较好得平分给两个社团,即两个社团所得的价值总量差要使得最小,Computer College 所获得的价值应不小于Software College 所获得的价值思路:乍一看不知如果去解决,仔细一想发现其实可以转换成一个01背包问题,先求出所有物品合起来的价值最大值sum,那么对于Software College 来说就转...
2018-07-23 08:23:41
174
原创 Piggy-bank
题意:有一个小猪牌存钱罐,空的时候重量为E,装了钱之后重量为F,现在给你n种钱的重量与价值,问存钱罐中的钱的价值的最小值是多少。链接:HDU 1114传送门思路:一个背包问题,应该是一个完全背包问题,因为要求存钱罐中的最小值,则初始化时应该为最大值。代码:#include <iostream>#include <cstring>#include <...
2018-07-23 08:14:59
260
原创 Bone Collector
题意:Bone收藏家有一个人容量为V的背包,请问它最多能收藏多少价值的骨头,每个骨头都有其对应的价值与容量。链接:HDU 2602传送门思路:01背包的经典问题,这题数据较小,不用优化也能过。用dp来解01背包问题是一种比较常规的解法。引入dp[i][j]来表示在前i个物品中选择背包容量为j时所能达到的价值的最大值。代码:/**01背包**/#include <iostr...
2018-07-23 08:06:30
153
原创 命运
题意:yifenfei一开始在左上角,目的当然是到达右下角的大魔王所在地。迷宫的每一个格子都受到幸运女神眷恋或者痛苦魔王的诅咒,所以每个格子都对应一个值,走到那里便自动得到了对应的值。现在规定yifenfei只能向右或者向下走,向下一次只能走一格。但是如果向右走,则每次可以走一格或者走到该行的列数是当前所在列数倍数的格子,即:如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或...
2018-07-22 08:44:13
146
原创 免费馅饼
题意:在接下来的一段时间里,馅饼都掉落在0-10这11个位置。开始时gameboy站在5这个位置,因此在第一秒,他只能接到4,5,6这三个位置中其中一个位置上的馅饼。问gameboy最多可能接到多少个馅饼?(假设他的背包可以容纳无穷多个馅饼)链接:HDU 1176传送门思路:可以发现是一个变形的数塔问题,设置一个二维数组,二维数组的第i行第j列代表在第i秒有馅饼落在位置j。做法与数塔类似,...
2018-07-22 08:40:41
184
原创 数塔
题意:求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 连接:HDU 2084传送门思路:经典DP问题,一般采用自底向上的方法来处理,dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+a[i][j] 其中dp[i][j]代表的是走到第i行j列位置经过的节点的数字之和的最大值代码:#include <iostre...
2018-07-22 08:32:38
233
原创 Humble Numbers
题意:因子只由2,3,5,7组成的数字为Humble Numbers,问你第n个Humble Numbers是几。链接:HDU 1058传送门想法:Humble Numbers都可以写成2的几次方*3的几次方*5的几次方*7的几次方,可以用dp也可以直接打表来模拟,我用的是直接打表,也很快且容易理解代码:void init(){ num[1]=1; int a,...
2018-07-22 08:27:25
235
原创 Super Jumping! Jumping! Jumping!
题意:如下图所示,要从start跳到end,中间的棋子都有一个对应的数字,求经过的棋子上的数字之和的最大值是多少,只能按严格递增的顺序来查找。连接:HDU 1087传送门思路:求最长上升子序列的最大和代码:#include <iostream>#include <cstring>#include <algorithm>using na...
2018-07-22 08:21:06
122
原创 Common Subsequence
题意:就是求最长公共子序列,模板题链接:HDU 1159传送门想法:如果s1[i]==s2[j] 则 c[i][j]=c[i-1][j-1]+1 如果s1[i]!=s2[j] 则 c[i][j]=max(c[i-1][j],c[i][j-1])模板:#include <iostream>#include <cstring>#include ...
2018-07-22 08:10:17
2954
原创 Max Sum
题意:求出一个序列中连续某一段的和的最大值,并求出是从什么地方开始到什么地方结束链接:HDU 1003传送门想法:用一个变量来保存一段和,用max_sum来保存到目前为止连续区间的和的最大值,temp和last用来保存连续和最大值的两个边界,如果sum值小于0,那就让sum=0。并改变temp关键代码: int temp=1; int n; ...
2018-07-22 08:04:12
314
原创 LELE的RPG问题
题意:有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.链接:HDU 2045传送门想法:假设RGP分别用123来表示,假设第一个方格为1,则第二个方格可能为2或者3,画图表示在第二个方格中2个不是1,所以在第三个方格中会有2个1,第三个方格中一个4个 在第三个方格...
2018-07-21 09:02:33
268
原创 统计问题
题意:在一个二维平面上,可以选择向上还是向左或向右移动,移动到的地方下次会立即坍塌,不能移动到已经坍塌了的地方,问移动n步有几种不同的情况链接:HDU 2563传送门想法:因为移动到的地方下次会立即坍塌,也就是说如果想右移动的下次就不能向左移动了因已经坍塌。所以向左向右移动的下次只有两种移动的方向。向上移动的有三种方向可以移动。在第 n-1 次移动中有 f(n-2) 次是向上移动的,不是很...
2018-07-21 08:51:41
486
1
原创 Tiling_easy version
题意:有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。(平铺类型的简单问题)链接:HDU 2501传送门想法:这是一个很简单的填充问题,当在2*(n-1)的基础上只能竖着放一个2*1的骨牌,在2*(n-2)的基础上可以横着放两个2*1的或者放一个2*2的。至于为什么不能竖着放两个2*1的是因为这种情况...
2018-07-21 08:45:59
481
原创 重建希望小学
题意:学校教室的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,如果要为该教室铺设地砖,请问有几种铺设方式呢?链接:HDU 2190传送门想法:要铺设3*n的地砖,当在3*(n-1)的基础上放时,只有一种情况,就是放三个1*1的。当在3*(n-2)的基础上放时,有两种情况,一种是两个1*1的地砖在上面,2*2的在下面,还有一种是2*2的在上面1*1的在下面。所...
2018-07-21 08:41:09
441
原创 折线分割平面
题意:一条直线可以将一个平面分割成两个部分,两条折线可以将平面分割成7个部分,求n条折线可以将平面分割成几个部分链接:HDU 2050传送门想法:之前接触过直线分割平面的问题,每增加第n条直线,就会在原来的基础上增加n个平面,因为会增加n-1个交点。折线分割平面问题也是如果,在增加第n条折线的时候,会增加4*(n-1)个交点,也就是说会增加4*(n-1)+1个平面,可以用递推去求,也可...
2018-07-21 08:36:08
438
原创 母牛的故事
题意:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?链接:hdu 2018传送门想法:这与之前做过的兔子问题差不过,兔子是在第二年可以繁殖,此题每头小母牛从第四个年头开始,每年年初也生一头小母牛,则在第n年的时候,母牛的数量为n-1年已有的数量加上n-3年的数量,因为n-3年的母牛在在第n年的时候都具有生殖...
2018-07-21 08:25:21
447
原创 骨牌铺方格
题意:在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.链接:hdu 2046传送门想法:2*n的长方形方格中,可以在2*(n-1)的基础上加上一个1*2的骨牌,也可以在2*(n-2)的基础上将两个1*2的骨牌横着放,所以可以得到递推公式为cards[i]=cards[i-1]+cards[i-2];代码:long long cards[60...
2018-07-21 08:20:42
561
原创 一只小蜜蜂
题意:一只蜜蜂只能在蜂房上向右爬,求蜜蜂从蜂房a爬向蜂房b的路线数题目链接:点击此处到hdu 2044 想法:蜂房的结构如上图,首先可以发现蜜蜂从1号走到8号的路线数与蜜蜂从3号走到10号的路线数是一样的,并且如果起点是在下半区,则将其翻转一下也可以变成一样的。代码:#include <iostream>#include <algorithm>#i...
2018-07-21 08:15:15
189
原创 超级楼梯
题意:一共有M级台阶,一次可以走一步或者两步,问走上M级台阶有几种方案题目链接:HDU 2041传送门想法: 由于一次只能走一步或者两步,所以走上M级台阶是在 M-1 与 M-2 的基础上再向上走一步所形成的,可以得到它的递推公 式 为 p[i]=p[i-1]+p[i-2], p[i]表示走上第i级台阶的方案数。初始值为p[1]=0,p[2]=1,p[3]=2.心得:楼梯问题是一种比...
2018-07-21 07:54:38
247
原创 Doki Doki Literature Club(Zoj 4035)
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4035题意:给n个字符串,给个字符串对应一个值,要求从中选出m个字符串,使得(m-i+1)*字符串对应的值相加起来最大思路:存在结构体之后进行值得从大到小排序,如果值相等就按照字符串的字典序进行排序代码:#include <bits/stdc++.h>u...
2018-04-30 15:07:12
386
原创 浙江省赛--Lucky 7(Zoj 4036)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4036题意:给n个数,问这n个数中是否存在一个数加b之后是7的倍数,存在这样的数就输出'Yes',不存在就输出'No';思路:直接模拟#include <bits/stdc++.h>using namespace std;int main(){...
2018-04-30 15:00:26
329
原创 快速幂的递归与非递归写法
递归写法#include <bits/stdc++.h>using namespace std;int pow_mod(int a,int n,int m){ if(n==0) return 1; int x=pow_mod(a,n/2,m); long long ans=(long long)x*x%m; if(n%2==1)...
2018-03-26 20:23:33
1021
原创 阶乘大全
n的阶乘的结果有几个零#include <iostream>using namespace std;int main(){ int n, ans = 0; cin >> n; while (n) { ans += n/5,n/=5; } cout << ans << endl; ...
2018-03-26 19:08:26
236
原创 分析外星信号
题意:给出长度为N的信号纪录时,编写程序计算总和等于k的子序列个数通过公式来生成输入值通过在线算法来编程,代码如下:#include using namespace std;struct RNG{ unsigned seed; RNG():seed(1983) {} unsigned next() { uns
2018-01-20 14:28:31
395
原创 逃离迷宫
逃离迷宫Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27482 Accepted Submission(s): 6750Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,glo...
2017-07-16 10:36:38
574
原创 Largest Rectangle in a Histogram
题目:Largest Rectangle in a Histogram 链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506
2017-05-23 21:45:42
173
原创 足球锦标赛
题目链接:http://acm.ecnu.edu.cn/problem/3267/足球锦标赛ECNU 足球锦标赛采用了最传统的计分牌来计分。每进一个球,计分员给对应的队要翻牌,使得计分板上显示的数加一。 如上图所示,计分板上的每一位都按顺序挂了 0 到 9 这 10 个牌子,所以可以表示 000 至 999。
2017-05-22 13:21:22
520
转载 合并果子
题目:合并果子 链接:https://vjudge.net/contest/162786#problem/D思路:将这一堆果子按从小到大进行排序,优先合并最小的两堆,再将合并之后的那堆果子给加到新的队列中。 重点:优先队列的使用
2017-05-17 17:41:55
2429
分治算法的典型例题
2018-01-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人