OJ
千灵域
腾讯WXG数据开发,主要进行golang、C++程序的开发,并协助维护Spark和Flink任务。博客会在工作之余侧重其他内容,主要集中在编程知识上。
个人博客的gitpage:https://www.challengefilter.com/
展开
-
【洛谷P1309】瑞士轮
P1309瑞士轮本题同样是NOIP普及组第三题。因为太久没有做过题目了,先从普及组开始练习吧。题目内容思路1很显然想到的思路就是模拟,代码如下:#include <iostream>#include <vector>#include <utility>#include <algorithm>using namespace std;...原创 2019-09-02 20:59:45 · 490 阅读 · 0 评论 -
leetcode 863. All Nodes Distance K in Binary Tree 解题报告
题目题目的大致意思是给出一个二叉树,一个二叉树上的点和一个距离,要求二叉树上所有距离这个点指定距离的其他点。 因为二叉树是有向的,基于它给出的数据很难在不使用其他数据结构的情况下直接求出这个点,所以我先用这个二叉树建立了一个无向图,再从给定节点对无向图进行广度优先遍历,从中找出深度为K的点,并将这些点返回。总体来说比较简单。这里有一个问题是我中间使用了vector作为最后广搜时判断是否遍...原创 2018-09-15 17:19:23 · 380 阅读 · 0 评论 -
leetcode 32题 Longest Valid Parentheses 解题报告
leetcode algorithm 32题 Longest Valid Parentheses 解题报告原题地址 这个题目一眼看过去就是用栈做,然后我就顺手写了个栈试了一些,结果就过了…… 然而这道题是归类在动态规划里面的,所以我后面会再尝试用动态规划的知识来解决,至少我花了两个小时还没有写出状态转移方程来,在看了答案之后才发现自己想的过于复杂栈解法用栈的话就很简单了,虽然很多括...原创 2018-09-05 22:29:11 · 185 阅读 · 0 评论 -
【noip2014提高组】飞扬的小鸟
#include #include #include #include #define maxn 10010using namespace std;const int inf = 0x7ffffff;int n,m,k,p,l,h;int x[maxn],y[maxn],down[maxn], up[maxn];int f[maxn][1001];int main() {原创 2015-07-16 18:57:05 · 1216 阅读 · 0 评论 -
【NOIP2015】day1第一题:生活大爆炸版 石头剪刀布
#include#includeusing namespace std;#define MAXN 210int r[5][5]={0,0,1,1,0, 1,0,0,1,0, 0,1,0,0,1, 0,0,1,0,1, 1,1,0,0,0, };int a[MA原创 2015-03-22 10:37:52 · 2016 阅读 · 0 评论 -
【141106noip训练】动态规划第三题:尼克的任务
8.3 尼克的任务源程序名 lignja.???(pas, c, cpp)可执行文件名 lignja.exe输入文件名 lignja.in输出文件名 lignja.out【问题描述】 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮原创 2014-11-06 12:06:47 · 422 阅读 · 0 评论 -
【P1776】关押罪犯 noip2010
因为自己的程序不知道出了什么错误莫名其妙地死掉了,只能用一下大神的题解了转载 2014-11-07 09:20:10 · 601 阅读 · 0 评论 -
【20141107noip】模拟训练第一题:combo
连续自然数和源程序名 combo.??? (pas,c,cpp)可执行文件名 combo.exe输入文件名 combo.in 输出文件名 combo.out 对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然原创 2014-11-07 09:17:00 · 397 阅读 · 0 评论 -
【20141106noip训练】动态规划第二题:血缘关系
8.2 血缘关系源程序名 family.???(pas, c, cpp)可执行文件名 family.exe输入文件名 family.in输出文件名 family.out【问题描述】 我们正在研究妖怪家族的血缘关系。每个妖怪都有相同数量的基因,但是不同的原创 2014-11-06 11:42:21 · 840 阅读 · 0 评论 -
【20101106】动态规划训练:字串距离
8.1 字串距离 源程序名 blast.???(pas, c, cpp)可执行文件名 blast.exe输入文件名 blast.in输出文件名 blast.out【问题描述】 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符原创 2014-11-06 11:12:51 · 1538 阅读 · 0 评论 -
【P1738】NOIP2011Mayan游戏C++题解(搜索)
这搜索真的挺麻烦的#include #include #include using namespace std;const int maxx = 5 + 5, maxy = 7 + 5, maxc = 10 + 5;int n, c;int a[maxx][maxy], cnt[maxc];bool f[maxx][maxy];int ans[maxx][3];void f转载 2014-11-05 16:50:02 · 1115 阅读 · 0 评论 -
leetcode 10. Regular Expression Matching 解题报告
这道题单论难度倒是不难,但是要考虑的方面比较多,因此很容易掉进坑里去。题目的大意是模拟正则式匹配,合法的原串输入是26个小写字母,匹配正则串的输入是小写字母以及’.‘和’*’。这其中唯一比较麻烦的就是*了,因为它可以有0到原串长度的可能,所以我认为应该用递归来做(原来是用for循环,但是发现怎么都处理不好)首先考虑到正常匹配情况,正常匹配的时候如果没有*,则一切正常;如果有*,则需要去试探...原创 2018-09-23 12:16:03 · 166 阅读 · 0 评论 -
leetcode 3. 无重复字符的最长子串 解题代码
不知道为什么上不去本站了,只能够上中国站。因为这道题目比较简单,所以只是贴上代码。这道题目的思路很简单,就不赘述了。这里反思自己的一个小问题,即开始的时候脑抽的以为题目只会给26个字母,所以直接用了一个数字作位运算来作为集合使用,但是后来发现不对劲,于是用了STL的集合。#include <string>#include <iostream>#include <...原创 2018-09-22 16:56:40 · 202 阅读 · 0 评论 -
leecode 4. Median of Two Sorted Arrays 解题报告
朴素解法求中位数一般是用归并排序,按照类似快排的思想求第k/2大的数。但是由于给定的两个数组都是有序的,一般第一眼看到这个问题,最先想到的就是两个数组做排序,然后输出中位数。不得不说leetcode的数据也是仁慈,居然直接就过了……这个思路实在是太简单了,就不讲了,看代码就好了。#include <string>#include <iostream>#include...原创 2018-09-23 10:08:42 · 109 阅读 · 0 评论 -
leetcode 564. Find the Closest Palindrome
结果到最后都没有调试出来自己的程序,还是用了别人的……解题思路这道题目的意思是,给予一个数字,计算与这个数字距离最小的回文字符串(不能是自身),如果有距离相同的话选择最小的那个。首先考虑回文字符串的字符串根,比如对于1213,字符串根为12,12131的话为121。这时候很明显,如果不是回文字符串的话,查找回文根的自身、大1位和小1位,肯定有一个是对的(因为不知道哪一个)除此之外的还有4种...原创 2018-12-09 20:39:52 · 142 阅读 · 0 评论 -
leetcode 839. Similar String Groups 解题报告
很明显的一个隐式图下连通分量计数。下面是比较明显的一个思路,通过遍历所有点,对于以前没有访问过的点进行深度优先搜索找到该连通分量内的所有结点,并在一个数组内进行标记。整体来说是O(n^2)级别,比25%左右的C++代码快。#include <iostream>#include <vector>#include <string>#include <a...原创 2018-12-02 18:47:03 · 369 阅读 · 0 评论 -
leetcode 123. Best Time to Buy and Sell Stock III 解题报告
标签为Hard,动态规划题目与一般的股票题目类似,但是最多支持两次卖出操作,很容易想到多开一个维度。设F[i][j]为第i次操作后第j天卖出时能得到的最大收益有F[i][j]=max{F[i-1][0..j-1]}+prices[j]-min{prices[i]}(i<j)边界条件F[-1][0..size]=0时间复杂度为O(n^2),空间复杂度为O(n),速度相当慢,耗时为10...原创 2018-11-25 12:15:38 · 188 阅读 · 0 评论 -
leetcode 115 Distinct Subsequences
题目大意是给出两个字符串S和T,要求求出S中与T相匹配的子字符串的数量。子字符串可以通过从S中删除元素且不改变剩余元素顺序的方式得到。想法1这是个动态规划题目,从题目的描述中其实就有陷阱,因为按照删除方法的话很难以去构建状态转移方程。子字符串的构建可以通过增加的方式,即每次找到一个S与T相匹配的字符,直到找齐,这个思想的递归解法很容易写出来。当然,肯定会超时。既然如此,可以按照类似的思想来...原创 2018-11-18 14:48:04 · 134 阅读 · 0 评论 -
leetcode 97. Interleaving String (hard)
一道动态规划的hard级题目,虽然实际上也不算难。因为上一周做的动态规划题目的影响,开始的时候也没有想着去写状态转移方程,考虑直接用递归做记忆化搜索(实际上就是暴力搜索)class Solution {public: bool isInterleave(string s1, string s2, string s3) { return isinter(s1,s2,s3...原创 2018-11-10 18:17:44 · 200 阅读 · 0 评论 -
leetcode 87 scramble string
开始的想法:暴力模拟直接模拟,题目的意思是根节点下的两个孩子可以交换,就递归模拟。然而后面发现根节点的位置似乎并不是固定的,故失败。我的代码:错误代码#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;...原创 2018-11-04 09:18:08 · 168 阅读 · 0 评论 -
leetcode 99. recover binary search tree 算法题解
题目给出了一个二叉搜索树,这个二叉搜索树中有两个节点被错误地交换了,题目的要求是恢复这棵二叉搜索树。我第一时间冒出的想法就是暴力搜索,枚举所有节点,然后检查二叉搜索树是否符合要求,复杂度为O(n2)O(n^2)O(n2)。这个显然太暴力了,不是没有办法不会用这个方法。第二个想法就是分类讨论,两个节点交换可能会有零个/一个/两个节点与其左右节点不相容。这里我有点忘记二叉搜索树的定义,二叉搜索树要...原创 2018-10-21 17:07:28 · 131 阅读 · 0 评论 -
leetcode 72.Edit distance 解题报告
这是一道经典的动态规划的题目,虽然我自己也没有写出来状态转移方程就是了。用dp[i][j]来表示word1[0…i-1]转移到word2[0…j-1]的最小步数其中i的取值从1到word1.length(),j的取值从1到word2.length()很容易有边界条件:dp[i][0] = i,dp[0][j] = j,表示从一个前缀与空串的转移关系然后推导状态转移方程对于dp[i][j...原创 2018-10-28 10:48:02 · 164 阅读 · 0 评论 -
leetcode 149. Max Points on a Line
题目并不复杂,但是要考虑到的情况也是不少。需要注意一条线上有多个点的情况。第一种方法非常容易想到的是暴力枚举,即对于一个点而言,所有与它在同一条线上的点必定会有相同的斜率,所以只要记下相同斜率时的最大点数即可。这里有一个问题时如果所枚举点重复出现的时候比较麻烦,需要用另外一个变量记录下来。#include <iostream>#include <vector>...原创 2018-10-07 17:58:52 · 199 阅读 · 0 评论 -
leetcode 126. Word Ladder II解题报告
题目给出了一个单词表,一个起始单词和一个结尾单词,要求找出所有的最短路径。因为一开始没有看到找出所有路径,写的是双向BFS搜索,后面改了一下,使用BFS进行查找。将原本的parent数组改为了vector<vector<string>>以满足查找所有最短路径的需求。在BFS的过程中,通过遍历单词表的形式搜索可行的单词。对于可行的单词,如果没有访问过,则将其入队准备进行访...原创 2018-10-12 20:16:36 · 174 阅读 · 0 评论 -
【20141105】搜索训练
7.6 三维扫描源程序名 scan.???(pas, c, cpp)可执行文件名 scan.exe输入文件名 scan.in输出文件名 scan.out【问题描述】 工业和医学上经常要用到一种诊断技术——核磁共振成像(MagneticResonance转载 2014-11-05 12:01:29 · 499 阅读 · 0 评论 -
【P1843】货车运输(最大生成树+LCA)
#include #include #include using namespace std;struct Edge{ int u,v,limit; inline void Read() { scanf("%d%d%d",&u,&v,&limit); }}Sed[50004];int son[10004];s原创 2014-11-03 10:48:30 · 537 阅读 · 0 评论 -
【wikioi】1169传纸条
题目描述 Description 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可原创 2014-05-04 21:21:50 · 770 阅读 · 0 评论 -
【wikioi】1166矩阵取数游戏
本质上就是一个在一行中头尾取数情况下原创 2014-04-28 21:38:53 · 504 阅读 · 0 评论 -
【vijos】P【1836】 坑人的01背包
#include#include#include#define MAXN 1001 #define MAXM 5001 #define inf 1000000000 double f[MAXM]; double t[MAXN]; int v[MAXN]; int n,sum=0;double min(double i,double j){ return i<j?i:j;原创 2014-03-27 17:12:48 · 509 阅读 · 0 评论 -
【LA3882】约瑟夫问题变形学习
#include#include#define MAXN 10002int main(void){ int n,k,m; int i,j; int f[MAXN]; while(scanf("%d%d%d",&n,&k,&m)==3&&n) { f[1]=0; for(i=2;i<=n;i++) f[i]=(f[i-1]+k)%i; int转载 2014-03-27 16:25:00 · 644 阅读 · 0 评论 -
UVA11374机场快线题目学习
学习《算法竞赛入门经典训练指南》思考:机场快线1.对起点和终点调用dijkstra2.枚举所有的商业线(包含没有使用商业线车票),计算从起点到a,a->b,b->终点,并与最小做对比(考虑到所有线路都是双向的,需要比较两次)3.打印出访问顺序给出经过的车站。可能需要用到路径寻找函数find对于函数find,因为所有点到目标点之间的最短路已经求出 首先求出起转载 2014-03-17 21:41:59 · 606 阅读 · 0 评论 -
C++实现代码雨
小伙伴发来的强大代码,据说能实现下图的效果#include #define ID_TIMER 1 #define STRMAXLEN 25 //一个显示列的最大长度 #define STRMINLEN 8 //一个显示列的最小长度 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; /转载 2014-03-09 16:47:02 · 12673 阅读 · 5 评论 -
【wikioi】1078最小生成树 floyd 改 仍40分代码
//floyd#include#include#define INF 120000 #define MAXN 110int dist[MAXN][MAXN];int path[MAXN][MAXN];int main(void){ int i,j; int n; scanf("%d",&n); for(i=1;i<=n;i++) { for(j原创 2013-12-17 21:38:45 · 562 阅读 · 0 评论 -
【wikioi】1078最小生成树 floyd 40分C源码
//floyd#include#include#define INF 120000 #define MAXN 110int dist[MAXN][MAXN];int main(void){ int i,j; int n; scanf("%d",&n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {原创 2013-12-16 21:50:07 · 497 阅读 · 0 评论 -
【wikioi】1078最小生成树 prim 100分C源码
#include#include#define INF 120000 #define MAXV 110int main(void){ int i,j; int k; int vis[MAXV]={0},v[MAXV][MAXV]; int n; int min,minpos; int ans; scanf("%d",&n); for(i=0;原创 2013-12-16 21:51:26 · 602 阅读 · 0 评论 -
【C源码】最大乘积问题
//输入n个数,输出n个数字的最大乘积//暴力枚举法练习//《算法竞赛入门经典》P115第七章 7.1.2#include#include#define MAX 20int main(void){ int i,j; int sum=0; int n; int num[MAX]; scanf("%d",&n); for(i=1;i<=n;i+原创 2013-12-10 21:21:17 · 668 阅读 · 0 评论 -
【wikioi】1014装箱问题题解(01背包标准)
无聊没事干的把1014刷了,这一道题是改了一点点的01背包,直接套就好了……由于打错了循环判断值还是花了一些时间 #include#include#includeint main(void){ int v,n; int f[20010]; int a[32]; int i,j,k; memset(f,0,sizeof(f));原创 2014-03-26 21:15:14 · 575 阅读 · 0 评论 -
【wikioi】【DP】1044拦截导弹
#include#include#define MAXN 100int max(int x,int y){ return (x>y)?x:y;}int main(void){ freopen("in.txt","r",stdin); int i,j,k; int a[MAXN]; int b[MAXN]={0},c[MAXN]={0};原创 2014-04-21 21:23:00 · 493 阅读 · 0 评论 -
【wikioi】1004四子连棋
这已经算是启发式搜索了转载 2014-05-09 20:35:44 · 571 阅读 · 0 评论 -
【wikioi】1174靶形数独
DFS爆搜,相当慢……#include #include#include#includeconst int M = 10;const int p[10][10] = {{0,0,0,0,0,0,0,0,0,0},{0,6,6,6,6,6,6,6,6,6},{0,6,7,7,7,7,7,7,7,6},{0,6,7,8,8,8,8,8,7,6},{0,6,7转载 2014-05-14 21:23:48 · 11436 阅读 · 0 评论