C++
文章平均质量分 63
Linnnnnger
哈哈哈哈,你看那个人好像一只狗啊。
展开
-
牛客网——丑数
题目描述很简单,给一个函数,返回第n个丑数。丑数:质因数只包含2,3,5的数字,第一个丑数是1。例如2,4,6,10就是丑数,7,14就不是丑数。一开始以为是直接暴力判断就可以过,但是后来发现,越到数字越大的数就会越容易产生非丑数,因此到后面的时候丑数与丑数之间可能存在很大的间隔,因此暴力数个数方法不可取。第二反应是搜索,从第一个数1开始每次放入2,3,5的倍数慢慢扩充,但是发现扩充过程数字大小并...原创 2018-03-04 19:59:47 · 459 阅读 · 0 评论 -
Kattis - oceancurrents优先队列+bfs
题目大意是,给定整个图中各个点的流向,在这个点上顺着流向前进是不需要消耗体力的,但是往其他方向走是需要消耗体力的.给定终点起点,求从起点到终点,最小消耗的体力是多少当时看到这个问题之后第一反应是搜索,但是1000*1000个各自显然是要爆炸的.赛后发现其实可以用优先队列搜索,或者是A*搜索原创 2017-01-14 08:45:00 · 356 阅读 · 0 评论 -
中序后序,中序先序求二叉树
用中序,后序求二叉树int build(int la,int ra,int lb,int rb){ if(la>ra) return 0; int root=a[ra]; int i; for(i=lb;i<=rb&&b[i]!=root;i++){} if(i<=rb){ L[root]=build(la,ra-rb+i原创 2016-08-26 03:22:07 · 547 阅读 · 0 评论 -
Function(HDU5875)
大连网络赛。当时挺混乱的,其实根本都没看这道题。后来看了题解觉得用的方法很巧妙。值得学习。同时回忆起一道以前的题目。用的都是类似的思想。#includeusing namespace std;#define inf 0x3f3f3f3fint t,n,q,l,r,ans,modpos;int a[100005];int rightpos[100005];int main原创 2016-09-11 18:49:21 · 402 阅读 · 0 评论 -
列车调度(PAT)
当时想了很久,总是超时。最后参考了别人的代码才完全A了。PAT题目总是这样,用一些很巧妙的容器跟函数。然后大大简化代码量。#includeusing namespace std;sets;int n,x;int main(){ cin>>n; s.insert(0); for(int i=0;i<n;i++){ cin>>x;原创 2016-09-10 19:15:50 · 1420 阅读 · 1 评论 -
红色警报(PAT)
一个并查集的问题。先把边全部存起来,然后记录节点是否被攻占。然后用这些边,去掉被攻占的节点。重复建图。不断比较。#includeusing namespace std;struct node{ int w,v;};node link[5005];int n,m,k,last,now;int pa[505],live[505];int findpa(int x){原创 2016-09-10 19:11:51 · 671 阅读 · 0 评论 -
UVALive 7427 Elementary Math
题目大意:给定一些数对,用+-*三个运算符号去操作数对,使得每个数对操作之后的结果都不相同。如果存在满足情况的解,则按照原顺序输出,否则输出impossible一个设计的非常巧妙地二分图!!数对是一边,匹配的是所有的运算结果,如果存在这样的结果,就把点对和结果连边,得出最大匹配。特别需要注意的是,结果存储的时候需要三倍空间。小错误真的可以让人WA到怀疑人生#includeus原创 2016-08-05 16:41:57 · 705 阅读 · 0 评论 -
Gym 100818F Irrational Roots
暑假集训题目。真的是涨姿势了。如果高阶方程的最高系数是1。那么他的根必然是整数根。题目要求求无理根的个数,则n减去有理跟的个数,其中注意判断重根。重根判断:已知某个满足条件的根对于原方程成立,求导之后,如果仍然满足方程,则必然是一次重根,继续操作就是二次,三次。#includeusing namespace std;int a[10];int n;int cnt;int原创 2016-08-05 16:23:28 · 458 阅读 · 0 评论 -
最小生成树的两种方法
最小生成树问题的讲道理都是很直观的,让人一眼看得穿,然后再在模版上稍加改动就完成了。一般来说Prim跟Kruskal方法都是能解题的。但是复杂度不一样。Prim的时间复杂度是O(n^2),而Kruskal方法与给出的边的数量有关,复杂度为O(eloge)其实时间都是花在排序上了 。1.Prim算法简单来说,就是从一个点开始不断寻找,链接着其他相关点,每次加入一个距离最小的点。其中low数组就是保存...原创 2016-02-19 22:46:29 · 1285 阅读 · 0 评论 -
数据结构复习——二叉树的几个基本操作
包括了几个很基本的操作,树的创建删除遍历等等#includeusing namespace std;typedef struct node* tree_pointer;struct node{ char ch; tree_pointer left_child,right_child;};tree_pointer create(tree_pointer T){原创 2016-07-03 10:03:20 · 435 阅读 · 0 评论 -
中缀表达式转成后缀表达式
正常表达式是中缀表达式,转化成后缀表达式之后方便计算值。需要注意的几点是。1.栈空直接将运算符号入栈。2.有元素,且栈顶元素优先级小于现有元素优先级,则放入,因为后边可能比改元素优先级还要高。3.栈顶元素优先级大于或等于当前元素,那么,必然是前面的先算,因此可以循环控制,将前面的优先级大于或等于当前元素优先级的符号都输出。4.控制左括号时,左括号进栈优先级降为最低。右括号进栈时原创 2016-07-02 15:24:07 · 399 阅读 · 0 评论 -
螺旋矩阵
螺旋矩阵解释起来有点烦,但是看上去之后让人一目了然。其实一开始对这个还是很反感的,因为特别难控制。但是参考了http://www.cnblogs.com/eshizhan/archive/2010/06/01/1749013.html之后,其实发现也就这么回事儿。#includeusing namespace std;int ar[105][105];int n;void Sp原创 2016-07-02 09:52:14 · 475 阅读 · 0 评论 -
01背包,完全背包,多重背包的个人总结
大一刚接触背包问题的时候就觉得绕。那时候真的是一点代码基础都没有强行去理解。每次都是以失败告终,一直到大二都还不会写背包问题。后来某次模拟赛之后碰到了背包问题,觉得这个还是挺简单的,终于是下定决心准备搞一搞这个东西了。有了一定的基础理解起来就比以前容易多了。首先,先分清楚这三个背包问题。1.01背包:有n种物品与承重为m的背包。每种物品只有一件,每个物品都有对应的重量weight[原创 2016-04-20 22:08:53 · 12671 阅读 · 9 评论 -
The Longest Straight(FZU2216)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2216题目意思是给出一列数字串,然后0是万能。求某一段能构成连续数列的串最长的长度。如3 5 0 1 2 9 9 9 9 9那么就是3 5 0(替换成4) 1 2最长的长度是5思路是离散化加二分,记录的是各个出现过的数字的位置。原创 2016-04-18 18:16:18 · 269 阅读 · 0 评论 -
hihocoder1138涨姿势的最短路
题目的大致意思是说,给定n个点的坐标,让我们求起点到终点的最短距离.点点之间的距离是min(abs(x1-x2),abs(y1-y2))一开始根本不会写.直到看到了博主:http://blog.csdn.net/octopusflying/article/details/51125562的代码思路大体是,从点1到点n的最短路必然经过这个点的前驱和后继.相对的,有x方向的前驱后继,y方向原创 2017-01-13 10:44:12 · 600 阅读 · 0 评论 -
hdu3172Virtual Friends涨姿势并查集
题目描述大致如下:给定n个关系,每次给出关系的时候,求出这个集合的中人的总数,每次合并这两个人所在的集合因为每次给出关系的时候都需要求出总数,所以每次去合并的时候去重新更新根节点,再去统计是不现实的.一开始因为这个TLE好几次.之后发现其实每个子节点的个数也是可以合并到根节点去的,就类似p数组,可以定义sum数组,每次合并的时候,把子节点中的个数加入到父节点中,每次输出父节点的sum即原创 2017-01-13 10:59:38 · 329 阅读 · 0 评论 -
牛客网——栈的压入、弹出序列
题目大意,给出两个序列一个代表压入序列,一个代表弹出序列,判断这是否是一个合理的弹出序列。一开始看到这个问题的时候直接想到了二叉树的先序中序,构造后续(我也不知道我的思路为什么这么清奇)。后来发现自己的思路歪了,然后简单的认为只需要判断弹出序列中,在判断某个数是否合理时,只需要判断在他之前弹出的数是否在压入序列中排在他的后面。但是后来想想又不对,顿时陷入僵局。后来查看了讨论中的代码。直接使用vec...原创 2018-03-02 19:01:21 · 328 阅读 · 0 评论 -
牛客网——正则表达式匹配
给出匹配串,给出模式串。给出两种正则运算,一个是.(点)表示占位代表任意一个字符,一个是字符*(例如a*)代表此处可以有任意个*前面的字符。一开始想着是正着慢慢模拟,但是显然不可行,正着做显然是直接使用了前面的字符,而每次特殊判断字符后是不是*号过于复杂。第二个想着是倒着匹配,碰到*号了往新串中添加字符,然后观察时候可以构造出一个与原串相同的字符,但是也失败了,因为无法控制个数,例如abaaaa,...原创 2018-03-07 13:00:36 · 979 阅读 · 0 评论 -
Kattis-spiral
题目大意:给定蛇形矩阵,然后矩阵中的素数是不能到达的.现在给定两个数,求从一个数为起点到另一个数的最短距离是多少.(上下左右移动)其实就是简单的素数筛,加简单bfs,只需要一开始吧矩阵构建出来就行.自己荒废了一个寒假,手生了很多.徒手撸的时候耽误了很多时间直接导致崩盘.引以为戒,而且自己以前也学习过一篇专门描写螺旋矩阵的题目的文章.写完就去回顾http://blog.csdn.net/tinygu...原创 2017-03-01 18:43:50 · 370 阅读 · 0 评论 -
树形dp回顾Anniversary party
这道题真的是已经被用烂了。一个是最大人数是多少,一个是最大的happy值是多少,都是大同小异的。从树根开始dfs做dp如果这个人是来的那么dp[root][1]先初始化,继续向下做dp。然后最后的状态方程式dp[root][0]+=max(dp[child][0],dp[child][1]);dp[root][1]+=dp[child][0];#includ原创 2017-04-01 18:18:56 · 352 阅读 · 0 评论 -
推箱子 HDU1254
题目大意是在说给一张图,给定人的起点和终点,以及箱子的起始位置,问最少箱子推多少格可以到达终点。感觉自己的做法稍微有点麻烦了。先是使用五维的数组pushdir[a][b][c][d][i]表示人在(a,b)位置,箱子在(c,d)位置是否能往上下左右四个方向推动。例如人在(0,0),箱子在(3,5)可以往上下左右四个方向推那么pushdir[0][0][3][5][0]=pushdir[0]原创 2017-04-01 12:53:44 · 397 阅读 · 0 评论 -
关于组合数与Lucas定理
这是属于数论的一部分,找了代码及题目。刷了几道题目之后发现其实大部分也都是在模版上做修改。Lucas定理是用来求 c(n,m) mod p,p为素数的值。正常用组合数做必然爆炸。因此先给出两种组合数的写法。第一种中规中矩的算,变算变除。减少了溢出的可能性,但数据一大还是要溢出的。long long Combination(int n,int m)//组合数{long原创 2016-02-19 22:59:24 · 584 阅读 · 0 评论 -
关于几种排序的个人整理及分析
个人总结,帮助自身理解。如有错误,望指正。原创 2015-12-10 18:44:49 · 524 阅读 · 0 评论 -
最短路问题(各种方法整理)附上一个完美模板
最短路问题(short-path problem),从某点出发到达另一点所经过的路径权值相加最小的一条路径,就是最短路径。经典的也是最容易掌握的方法Floyd,Dijkstra两种算法。1.Floyd算法Floyd算法可以求解的是任意两点的最短路径,功能强大,因此复杂度也很高,但是非常的好懂。思想很简单,两点的最短路径无非就是直接从一点到另一点,要么就是中间还存在着其他的点。因此只原创 2016-04-27 20:41:38 · 5936 阅读 · 0 评论 -
codeforces455A-Boredom
一开始没想到是dp题.想到之后其实发现还是挺简单的.记录的是每个数字出现的次数,然后如果这个数要取那么对答案的贡献是c[i]*i,因为有c[i]个i,然后如果这个数不能取,那么必然是前一个数取过了.因此,状态转移方程是dp[i]=max(dp[i-1],dp[i-2]+c[i]*i),需要注意的是会出现溢出问题#includeusing namespace std;#define inf原创 2017-02-15 15:16:00 · 611 阅读 · 0 评论 -
codeforces368B - Sereja and Suffixes
题目大意:给出n个数字m个 查询,然后查询的从第x个位置到最后一个位置,去重之后剩下几个数字.一开始真的挺难想的.数据范围都是1e5,觉得应该是nlog的复杂度,联想到树状数组等.但是还是无果,看了题解之后顿时觉得自己好蠢正应了先前的那句话碰到题目难解的时候一定要反过来考虑.反过来考虑的话就简单多了.从最后一个数开始,出现一个数,标记一个数.如果当前的数出现过了,那么ans[i原创 2017-02-17 14:57:55 · 408 阅读 · 0 评论 -
Kattis-torn to pieces
题目大意:第一行给出n代表有n张地图碎片,接下来n行给出碎片上的信息,第一个单词代表这个碎片上的节点,后边所有的节点都与第一个节点相连接.最后一行给出查询,问从A到B是否存在一条路径可以通过给定的拼图的一部分拼凑而成,可行的话输出路径,否则输出no route find可能是比赛当时受了先前题目的影响,看到这题之后第一时间想到的就是最短路,题目保证了最多只有一条路.因此,只需要把每个节点名原创 2017-01-14 08:52:21 · 780 阅读 · 0 评论 -
codeforces520B-Two Buttons
题目已经写过很多次了,但是还是写错.记下来引以为戒.题目大意,给定两个数a,b,通过两种操作将a变成b一种是将a乘以2,一种是将a减1这里可以用贪心的思路做,强行bfs搜也是可以,但是数据一大就容易T首先如果a>b那么必然是直接减,因为变小的操作只有减如果a如果是偶数,那么必然最后一步是乘以2也可以还原,把b变成b/2直到操作到b思考的方式其实是倒着做,并不是用a去原创 2017-02-17 12:34:37 · 782 阅读 · 0 评论 -
阶乘位数问题
这次碰上的问题更加奇葩.需要求N次阶乘之后一共有多少位.方法一,取log10既是N次阶乘的位数又给定是阶乘,所以可以分解成log的加法运算.代码如下#includeusing namespace std;#define inf 0x3f3f3f3f3fdouble x;int t,n;int s[1000005];int main(){ //freopen原创 2017-01-13 11:06:11 · 467 阅读 · 0 评论 -
Knapsack problem(FZU2214)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2214题面是最正常的背包,但是背包重量大到让人思考人生。说真的第一看见这样的题目,比赛的时候看见空间这么大顿时懵逼了。真是无从下手。然后慢慢的就想到了背的是价值不是空间,然后就出来了,但是边界情况一定要处理好,赛场的时候因为边界问题RE了好几次#include#include#include原创 2016-04-18 17:23:05 · 412 阅读 · 0 评论 -
RSA的简单模拟实现
对称加密都非常好理解,而且十分容易实现。其实小的时候就早早知道了非对称加密的概念。但是就算在现实中找到海枯石烂也找到不到一个实例去实现。然后上课老师举了一个很形象的例子:非对称加密就像一个邮箱。邮箱的外壳就是加密秘钥,而邮箱的钥匙是解密秘钥。大家都可以使用这个加密秘钥把自己的信息发送出去而其他人也是同样的手法加密信息。但是过程是不可逆的,只有拥有解密秘钥的人,也就是拥有邮箱钥匙的人才能原创 2016-05-12 20:19:41 · 950 阅读 · 0 评论 -
最长上升子序列LIS(Longest Increasing Subsequence)
给出一个数组,求里边上升子串的长度。如{1,3,2,7}可以发现上升子串有{1,2,7}或者{3,7}或者{2,7}最长的是{1,2,7}长度为3下边给出n^2算法#includeusing namespace std;int n,ans;int dp[1005],a[1005];//dp[i]表示以i为结尾的最长上升子序列的长度int main(){ mem原创 2016-05-07 19:05:47 · 607 阅读 · 0 评论 -
The 7th Zhejiang Provincial Collegiate Programming Contest
A - Who is Older?#include#include#include#include#include#include#include#include#include#include#define mod 1e9+7#define ll long long#define MAXSIZE 100005#define inf 0x3f3f3f3f#defin原创 2016-04-05 18:49:42 · 894 阅读 · 0 评论 -
The 4th Zhejiang Provincial Collegiate Programming Contest
A - Attack of Panda Virus题意:给出矩阵,然后负的代表第几天可以被感染,正的代表这个电脑已经感染上这个类型的病毒,病毒可以四处扩散,最后求询问的类型的病毒的最后的种类.其中种类小的先扩散,时间小的先扩散,看了题解之后才想到优先队列去解决代码:#include#include#include#include#includeusing namespace原创 2016-02-28 10:55:30 · 446 阅读 · 0 评论 -
The 5th Zhejiang Provincial Collegiate Programming Contest
A - Accurately Say "CocaCola"!题意:过7游戏,但是这次需要求,连续过x个7的时候,第一个数是几.直接暴力打表,马上找到规律代码:#include#include#include#include#include#include#include#include#include#include#define mod 1e9原创 2016-03-12 15:26:36 · 670 阅读 · 0 评论 -
Number Game(ZOJ3908)
题目意思是给出n个数,每次挑两个数,满足加和小于等于k,然后求出这两个数的积。最多操作m次。求多次的积的最大的和。首先先明确,最大的数,乘以满足条件的最大的数必然得到的积最大。比如k=8,我有1,2,3,5。那么我必然选3,5.思路是先模拟操作,求出每次的积保存起来再加和。因为,第一次的数求积并不一定是所有积里最大的一个。如k=8,数组是1,2,3,5,6.第二组3*5=15,第一组2原创 2016-03-22 20:01:01 · 614 阅读 · 0 评论 -
Consecutive Blocks (ZOJ3970)
给出n个带着颜色的方块,然后最多去掉k块,求最长的连续颜色段。如1122322,去掉3则最长是4,另外113311去掉33最长则是4。思路是先把所有的颜色排到一起,再去一次遍历得到符合条件的(去掉小于等于k块)最大连续段。难点:1.关于把所有的颜色放到一起,可以开许多个vector把相同的颜色放到同一个vector,也可以自己写cmp排在一起,操作起来大同小异。2.关于怎么原创 2016-03-22 19:53:22 · 847 阅读 · 0 评论 -
关于动态规划的一个精彩的入门文章(背包)
原文地址如下,已经不再更新http://www.cnblogs.com/SDJL/archive/2008/08/22/1274312.html ---------以下是原文---------对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思转载 2016-03-22 17:55:40 · 540 阅读 · 0 评论 -
进制转化(尤其是负进制)
现在在noip的系列题上做到过进制转化的问题,一直没时间去搞明白,今天总算弄清楚了。http://www.cnblogs.com/yylogo/archive/2011/08/04/NOIP-2000-2.html123可表示为 1*102+2*101+3*100 这样的形式。分四种情况1。十进制数是正数,基数是正数(这种情况最容易)2。十进制数是正数,基数是负数3原创 2016-03-11 12:41:15 · 620 阅读 · 0 评论 -
The 6th Zhejiang Provincial Collegiate Programming Contest
A - Second-price Auction题意:找到最高出价人,然后找到第二高的价格代码:#include#include#include#include#include#include#include#include#include#include#define mod 1e9+7#define ll long long#define MAXSIZE 1原创 2016-03-12 16:05:44 · 409 阅读 · 0 评论