07 2020 档案
摘要:简述 给你两个数a和b,要求求出a和b的最大公约数。为了解决这个问题,我们可以想到很多方法,穷举法,辗转相除法,更相减损法等。这里我们详解介绍穷举法和辗转相除法。 问题描述 我们把问题用数学语言进行描述:已知整数a和b,求一数k满足a%k==0&&b%k==0,且k要尽可能大。 穷举法 因为k小于等
阅读全文
摘要:题意 给你一堆字符串,要求找到每个字符串的唯一标识前缀,输出原字符串和唯一标识前缀。 思路 用这堆字符串建字典树,对于每个字符串,我们进行一次查找,若当前位置的cnt为1,就代表从根到现在的位置能唯一标识。 AC代码 #include<iostream> #include<stdio.h> #inc
阅读全文
摘要:题意 给你若干个字符串,要求你找出符合条件的字符串并输出,条件是该字符串拆成两段后,两段均出现过。 思路 建字典树,然后遍历字符枚举端点,对左右两段字符串在字典树上进行查询。若均能找到则该字符串为符合题意的字符串。 这题的插入不能每个字符的cnt都++,而要在末尾字符++,因为题意要求是拆分后的字符
阅读全文
摘要:题意 给你多个单词构建一个单词本,再给你多个单词,查询每个单词在单词本里作为单词本里单词的前缀出现了多少次。 思路 裸的字典树题,构建的时候插入,查询的时候直接查就行。 AC代码 #include<iostream> #include<stdio.h> #include<string.h> usin
阅读全文
摘要:题意 给你n个数字,若这些字符串中有字符串成为一个其他字符串的前缀,输出no,否则输出yes。 思路 考虑用字典树存所有字符串,然后遍历一遍,对当前字符串在建好的字典树上查找,若在结尾处的cnt值不等于1,则证明从根到当前字符至少是另一个字符的前缀,符合题意的NO。 AC代码 动态申请,poj会T
阅读全文
摘要:简述 字典树又称tire树,其为哈希树的变种,哈希树存的是键值字典树存的是字符。字典树用于统计,排序和保存大量字符,常用于搜索引擎,其本质是用字符串的公共前缀来优化查询。其查询过程就像我们在查新华字典,查询时间为O(len)。 树的样子 假设我们要存以下字符串:"to","tea","ted","t
阅读全文
摘要:题意 给你一个函数,对于每个n和c,求fc(n)%1e9+7的值。 思路 我们观察第一个式子,i从1到x-1和x的gcd,求出来的一定就是x的所有因子,一直递归到x=1,我们可以直到答案一定是c的幂,我们要使这个幂尽可能要大。每递归变成一次gcd会使c的幂加一,也就是说递归得越久,答案就越大,于是我
阅读全文
摘要:简述 什么是树状数组呢,顾名思义就是树一样的数组,本质就是用数组模拟树形结构。 树状数组有什么用呢,树状数组可以实现单点更新,单点查询,区间查询和区间更新,维护的东西和线段树可以类比的,就是满足区间加法性质的属性,例如最值,和,gcd等。 树状数组可以干的东西线段树也能干,但线段树干的东西树状数组不
阅读全文
摘要:题意 给你一个长度为n的字符串,要求往字符串右边添加尽可能少的字符串,使整个字符串为回文串。 思路 尽可能少就是添加 n-该数组的最大回文后缀 个就行。 首先跑一遍马拉车,求得num数组,num[i]为填充字符后的字符串第i位的回文半径,所以num[i]+i==len-1时,此时的回文子串是紧贴右边
阅读全文
摘要:简述 Manacher算法,又称马拉车算法,它是用于求一个字符串的最长回文子串长度的算法,时间和空间复杂度为O(n)。 算法思想 求一个字符串的最长回文子串长度,我们如果用暴力来做,我们就要取出这个串的所有子串,然后判断这个子串是不是回文串,复杂度是n方的。 那么马拉车为何如此神奇能做到O(n)呢?
阅读全文
摘要:题意 给你一颗树,要求构造最少的链,这些链覆盖该树的所有边,输出链数和每一条链的两个端点。 思路 我们很容易想到,这些链的两端应该是叶子节点,设叶子节点个个数为s,那么我们可以构造出s/2的链,使所有边被覆盖,那么现在难点就在,如果让构造的两个端点不是兄弟,例如 如果我们选择(4,5),(6,7)那
阅读全文
摘要:题意 思路 手动算出n=1,2,3时答案为6,30,140的倒数,用oeis查询得到答案。 但正解是用分部积分: 我们预处理出1e6以内的阶层和逆元,注意逆元可以只处理maxn,然后逆推压复杂度。 AC代码 #include<iostream> using namespace std; typede
阅读全文
摘要:题意 给你一个n,要求给出两个整数a和b,使得a+b=n且lcm(a,b)最小。 思路 结论:答案是k和n-k,k为n的最大真因子。 证明:假设a<=b,则lcm>=b,取最小则自然是lcm==b,lcm>b,最小的就是2b,2b>n故舍去,所以我们要构造lcm=b的解。 lcm=b故a整除b,则b
阅读全文
摘要:题意 给你一个长度为n的序列,值在0到n之间,你每次都可以指定任意一个位置,使这个位置的值变成当前的mex,要求使整个序列变得非递减的,问输出每次操作的下标。答案可任意。 思路 我们考虑如何讲序列变成1 2 ... n这样一个特定的序列,这样就满足了题意的非递减。 我们将a[i]!=i的下标称之为失
阅读全文
摘要:简述 文兰之地历历时1个月零5天,于7月6号22:05正式结项,在大佬黄啸宇,大佬郭嘉鸿的帮助下,我们制作了游戏剧情,完成了游戏的美化,丰富了游戏的玩法,真真正正把第一期游戏总体设计的东西全部开发出来了,本文将对我们的开发过程和团队协作予以展示。 游戏的基本开发 6月2日,第一个场景完成。 6月6日
阅读全文