自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lazycat233的博客

The magical will be created by the lazy.

  • 博客(31)
  • 收藏
  • 关注

原创 Leetcode 4. 寻找两个正序数组的中位数

题目链接:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/题目大意:给两个不定长正序数组,返回两个数组的中位数,要求O(log(m+n))【解一】(可跳过)这题如果不要求时间复杂度那就很简单很暴力了,直接合并成有序的就可以。{ps:考虑一下合并最快的效率是什么?因为本来就是有序的,用归并排序是最快的,甚至也不需要全排,扫到中位数的位置就行了,O(m+n)}当然这个复杂度是不符合要求的,但是离谱的事情是,随手交了下面这个代码准备验

2021-12-09 11:31:37 110

原创 Leetcode 3. 无重复字符的最长子串

【解一】经典的滑动窗口既视感,需要维护窗口内没有重复的字母,所以我们可以直接做一个集合存一下窗口内现有的字母。如果窗口右侧更新了,需要维护左侧保证把重复的字母挪出窗口。在这个过程中记一下最长的长度。class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if len(s)==0: return 0 window = set(s[0]) left = 0

2021-12-03 15:57:00 221

原创 Leetcode 2. 两数相加

【解一】这个题一看就是个按位加的操作嘛,链表是逆序的所以从头到尾加就相当于从个位开始往高位加了,记得处理进位就行。那麻烦点在哪里呢?人家是链表存的,所以需要准确抓到头和尾巴。l1和l2不一定是等长的,所以长度不够的要在高位补0,那么就相当于每当有一串列表空了,就给它尾巴上补一个(0,None)。终止条件是两串都到底了并且也没有需要进位的。【ps】这里加两个trick。首先我们两数相加构建了第三个链表,但其实l1和l2加过的节点都没什么用了,所以完全可以直接把结果存进l1里面,这样节省空间。另一个trick

2021-12-03 13:33:08 350

原创 Leetcode 1.两数之和

Leetcode 1.两数之和【解一】就。。第一眼就很直接很暴力,两层循环遍历两个数配一下,和等于target就return坐标。然后注意一下题目说不能用同一元素,再加上我内外两层找到的元素ab,再遍历到ba的时候其实已经判断过了,这没必要,所以直接规定内层循环的元素要在外层循环的后面就好了(一个右上三角形)。class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: for i

2021-12-01 21:39:00 1097

原创 7.14.实验 解题参考

ProblemA(HDU1215) ProblemB(HDU1286) 这两题是上课例题,不再赘述了。 ProblemC(HDU1406) 【一】这题的数据可以直接判断,在num1和num2之间的数是否符合要求。但有个巨坑需要注意,num1和num2不一定是大小顺序给出的!! 【二】但既然学会了筛选法,很明显可以看到这题先预处理,将10000以内的数据先用判断函数跑一遍,存表再做会有更高的

2016-07-14 12:12:28 224

原创 7.13.实验 解题参考

ProblemA(HDU1398) 给你一个数 让你求出1~17中每个数的平方任意组合 有几种情况满足条件。套母函数就行,注意是数的平方,k要写成i*i。#include<stdio.h> #include<math.h> #define max 302 int num1[300]; int num2[300]; void init() { for(int

2016-07-13 11:11:18 255

原创 7.11.实验 解题参考

ProblemA(HDU1008) 直接模拟,每个请求根据状态累计时间。#include<iostream>#include<cstdio>using namespace std;int main(){ int n; int a[1000]; while(scanf("%d",&n)!=EOF && n) { int i; for(i=0;i<n;i

2016-07-11 13:01:03 307

原创 7.8.实验 解题参考

ProblemA(HDU2084) 这题题目都说了经典DP 由上往下推,由于结果状态多,不好处理。无疑由底往上推比较方便,都归于一个起点,只需要算出由底往上得到的最大价值即可。 方程:dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+a[i][j];#include <stdio.h>#include <string.h>#include <algorithm

2016-07-08 11:11:11 348

原创 7.7.实验 解题参考

ProblemA(HDU2037) 这道解题,是希望看到节目尽可能多,那么安排好前面的节目后,如果剩下的时间更多,能选择的节目就更多。 所以贪心策略是对每个节目的结束时间排序,目的是使剩余时间留下,再判断还能看几个节目。对节目时间的排序结束后,依次判断,这次要看的节目的开始时间是否大于上次看的节目的结束时间,若是大于,则这个节目时可以完整观看的,若是小于则是不能完整观看的,所以跳到下一个节目继续

2016-07-07 12:42:48 305

原创 7.6.实验 解题参考

ProblemD(HDU2111) 这是一个经典的部分背包,由于物品都是可分割的,当然是用贪心的思想,单位价值越高越好。则先按单价排一次序,从头开始取,如果能装下就全部装进包里,否则将该物品分割开尽可能多的装。#include<cstdio>#include<iostream>#include<algorithm>using namespace std;typedef struct nod

2016-07-06 12:23:24 313

原创 7.5.实验 解题参考

Problem-A(HDU1157) 排序水题,将输入数据排序用一次sort,输出中位数即直接输入第n/2个位置上的数。#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int a[10010];int main(){ int n; while(scanf("%d",&n)!

2016-07-05 11:28:35 311

原创 了解STL库中的squeue

【数据结构第二周作业文档】了解STL库中的squeuequeue单向队列与栈有点类似,一个是在同一端存取数据,另一个是在一端存入数据,另一端取出数据。单向队列中的数据是先进先出(First In First Out,FIFO)。在STL中,单向队列也是以别的容器作为底部结构,再将接口改变,使之符合单向队列的特性就可以了。单向队列一共6个常用函数:front()取队列头部数据、back()取队列尾部数

2016-03-20 21:38:38 923

原创 Contest 7 1007 Gray code【DP/贪心】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5375这题倒是不难,然而被笔误折腾死了TAT还被无良队友坑了两顿大餐~~ 做法有两种我都尝试了一下。 第一种是动态规划,用dp[n][2]的数组,0、1分别是可能的数字,不能取0或1时赋值为-1作为标识。状态转移很好理解,方程看程序一即可。 第二种比较巧,算贪心吧?(就是这题笔误WA了好几遍TAT

2015-08-16 18:28:08 295

原创 Contest 7 1011 Mahjong tree【递归/树】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5379这一题做的真是曲折坎坷。 本来比赛时看完题算法已经大致清晰了,再理了一下基本都已成型了:条件有:兄弟节点之间编号连续,整棵子树编号连续,可推得每个子树来说其根节点为最大值或最小值。 算法是对根节点来说,可以取最小的也可以取最大的(这里方案数×2),剩下一整个区间分配给底下的节点们,可以有几种情

2015-08-14 21:03:42 322

原创 Contest 7 1003 Hotaru's problem【字符串】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5371这题出的还是蛮卡时间的。 三段中第一段与第二段回文、与第三段相同。可以想到是一二段回文紧接着二三段也是回文。那么问题归于高效的找到回文串。这里学到一种算法:Manacher。时间复杂度O(N) 回文串很麻烦的一个地方就是有分奇偶的情况。而这个算法巧妙地统一起来考虑了。还有一个很好的地方就是充分

2015-08-14 20:19:35 365

原创 HUD 1564 Play a game【博弈论】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1564博弈论总是别出心裁的。。想清楚了程序仍然短到哭。 这题是分奇偶。 如果格子数为偶数,总可以将相邻两小格合并成一大格,先手先走一小格,后手会跨入另一个大格中,这时先手总有该大格的第二小格为落脚点。最后后手无路可走。 如果格子数为奇数,按以上的方案划分会单出一小格,显然会给先手带来麻烦,先手走过

2015-08-10 20:56:35 286

原创 HDU 1029 Ignatius and the Princess IV【贪心】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1029水题也是可以玩出花的!!!好吧又是一个归在dp里但是完全可以直接水过去的。。 数据不大开出桶往里丢就行了。见程序一。下面是重点—— 然而做题要追求姿势优美。。万一数据很大开不了桶呢对吧? 有种方法倒是非常妙~既省时间又省空间。。 因为special integer个数至少大于总数一半,在数

2015-08-10 20:12:16 287

原创 HDU 1024 Max Sum Plus Plus【DP】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1024给定一个n个数的数组,求其分成m个不相交子段和最大值的问题。很容易感觉是dp(咳咳。。从dp专题刷的题好意思说= =)num是给定数组,dp[i][j]表示前i个数在选取第i个数的前提下分成j段的最大值,其中1<=j<=i<=n && j<=m,状态转移方程为 dp[i][j]=max(dp[i

2015-08-10 17:20:16 218

原创 HDU 1847 Good Luck in CET-4 Everybody!【博弈论】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1847博弈论题目经常有这种那牌啊拿硬币的游戏,特定条件下后手能赢,否则一定是先手赢的。 这一题倒是也很有意思(以往大多n很小的几个值时或游戏开始时怎样,后手会赢;这个题居然是看能不能整除3。。。) 好吧确实按平时的经验总是很别扭,但是多写几个数比较立刻就发现规律了——3的倍数都是Cici赢的。。恩再

2015-08-09 16:15:06 222

原创 HDU 1003 Max Sum【贪心】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003这题被汇总贴放在dp里。。 然而本着刷dp的心来却抱着贪心的姿态A了。。 然而就是感觉该这么做啊,从前到后扫一遍,拿一个即时的计数器加现在的数,不断比较max与这个即时的now比较更新max,顺便记录下max对应的首位。注意到如果某一步时now为负,那么它往后加还不如从后面重新作为开头,将no

2015-08-09 15:50:12 287

原创 Contest 6 1011 Key Set【math】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5363要求从1~n中所有数组成的各子集中,子集元素和为偶数的个数 考虑: 1、两个奇数可以组成一个偶数 2、集合中元素不存在重复 3、注意去掉空集 最后推出的结果是2^(n-1)-1 数据量大这里需要用到快速幂。#include<iostream>#include<algorithm

2015-08-08 16:39:13 211

原创 Contest 6 1008 Hiking【贪心+优先队列】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360几乎四个小时调这一个题,终场前半分钟交上真是个杯具TAT 换了各种思路各种T。。最后不得不承认STL还是很强大的TAT 言归正传。。 先按开始时间为第一关键字结束时间为第二关键字升序排。 然后每次发邀请时将当前满足条件的(从开始时间的区间就能找)加入优先队列,优先队列的排列规则是按结束时间

2015-08-07 19:51:11 302

原创 HDU 2612 Find a way【bfs】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2612从Y和M分别dfs到每个KFC最短的路程,然后对每个KFC比较,找到Y和M距离和最短的。 这题一开始错误的思路方向是从KFC向Y和M找,显然KFC比较多,dfs的次数太多会超时。#include<iostream>#include<cstdio>using namespace std;in

2015-08-07 18:49:08 260

原创 Contest 5 1007 MZL's simple problem

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5349因为删除操作每次只删最小的,而查询操作每次只问最大的,所以可以不必保留数据,只记录总数和更新最大数即可。 要注意考虑总数为0,即删除空了时对数据的影响。#include<iostream>#include<cstdio>int main(){ int n,sum,m,op,x;

2015-08-07 18:35:19 272

原创 Contest 5 1005 MZL's chemistry【打表= =】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5347打表。。。= =#include<iostream>#include<cstdio>using namespace std;float f[87]={0,1312,2373.3,520.2,899.5,800.6,1086.5,1402.3,1313.9, 168

2015-08-07 18:30:47 207

原创 Contest 5 1002 MZL's xor【math】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5344由于a[i]+a[j]和a[j]+a[i](i≠j)会抵消,只需要求a[i]+a[i]的。#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int

2015-08-07 18:08:18 259

原创 HDU 1241 Oil Deposits【dfs最大联通块(洪水算法)】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241典型的“洪水算法”。#include<iostream>#include<cstdio>using namespace std;int a[200][200];int n,m,sum;void make(int i,int j){ a[i][j]='*'; if(i-1

2015-08-05 14:44:10 274

原创 括号配对问题【建栈】

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=2建一个栈就好啦~#include<iostream>#include<cstdio>using namespace std;char a[10010];int main(){ int n,i; char ch; bool f; scanf("%d"

2015-08-05 14:38:42 262

原创 Contest 4 1009 Walk Out【bfs】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5335dfs搜索。 首先尽量走0,dfs找到所有能走到的0。 如果已经可以到达终点当然不用做了。 如果不能到达,那么从0上走到离终点最近的地方,再规定只能向右、向下走找路,且尽量使踩到的值小,可得到最优。。 恩,就酱。。。#include<iostream>#include<cstdio>u

2015-08-04 21:08:00 244

原创 Contest 4 1002 Problem Killer【等差等比数列】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5328#include<iostream>#include<cstdio>using namespace std;long long a[1000010];int main(){ int t,n,i,j,m; scanf("%d",&t); while(t--)

2015-08-04 20:51:45 266

原创 Contest 4 1001 Olympiad【拆数】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5327#include<iostream>#include<cstdio>using namespace std;int make(int k){ int j; bool flag; int f[10]; for(j=0;j<=9;j++) f[j]=0;

2015-08-04 20:39:09 262

空空如也

空空如也

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

TA关注的人

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