随笔分类 - 算法竞赛入门经典(紫书)
立志包括紫书中任意一道程序、例题和习题!
摘要:这道题像是一道比较水的图论题,其实主要不是靠图论,而是考的全排列暴力法。 首先看到n define N 35 using namespace std; int g[N][N],spot[N],stv[N]; vector va; void read_str(string s); int main()
阅读全文
摘要:这道题写了接近两个小时。思路很容易想,但是bug不好调,尤其是这种暴搜的题。没看紫书解析,这道题独立做的。 bug出在下面几个方面 1.由于没有完全搞明白参数的意义,所以递归函数的参数多了1。本应该搜索sech(1,n 1),刚开始我一直搜索成了sech(1,n)。这是因为,第一个参数意为已确定的序
阅读全文
摘要:还好吧,刚开始没想明白用什么数据结构来做,后来才想到用一个队列和一个队列数组,一个存当前队伍的排队队列,另一个存每个在排队的队伍内部的人员队列。其他的set什么的,都不是最重要的内容了。 卡了我三个点: 1.忘了控制空队出队,空队排头了,导致了RE一次.在写了判定条件之后RE没了,成了WA—_— 2
阅读全文
摘要:这道题我没做出来, 主要是因为数据结构没想出来 。我想的是用一整个图来存这个正方形,以及那些点的相互连接情况。但是想出来的结构都太繁琐了,而且错误率很高。最后在网上看了一个大佬的解法,很受启发,就写出来了。 他的解法没全存,而是分开横行和竖行存,两个一维数组,第i个元素表示是否i和i+1号元素相连接
阅读全文
摘要:这题真繁琐,昨晚上我写到了两点,以为把炮的、将的模块都写对了,只剩下马和车的了,但是今天下午头脑清醒了,才发现这俩模块都写错了,于是我相当于全重写的,最后输入输出也改了。但是基本的架构还是没改。 算法是这样的:开一个二维字符数组,存放对应棋子到坐标上,记录两个将的位置。最开始先判定“飞将”,如果飞将
阅读全文
摘要:不知道是我把题意理解错了还是题目出错了,我觉得,在题目的要求之下,如果能够反转其中一块板,那么会得到更短的长度。但是测试数据表明不需要反转板。 刚开始写怎么写都写不对,因为对相交部分的考虑不够细致,处理的比较粗糙,后来看了网上大佬的代码,才明白应该怎么做才简单。只需要比较三个数据:字符串1的长度、字
阅读全文
摘要:水题,记两个位置,依次遍历,从头找到尾就行了,对每个用例,复杂度o(min(s.size(),t.size())). C++ include using namespace std; string s,t; int main() { ios::sync_with_stdio(false); cin.
阅读全文
摘要:这个题我刚开始就想用容器来做,选了vector ,相当于一个二维数组。每一个位置上的元素为一个map,map中就四种类型的元素,'A','T','C','G',对每一个位置对应的字母,这个map都+1,最后就成了统计每一个位置上四个字母的出现次数,找到出现次数最多的作为答案字符串上该位置的字符;如果
阅读全文
摘要:太水了,直接循环计数就行了。 C++ include using namespace std; int ans[11]; int main() { int n,num,t; cin n; while (n ) { cin num; for (int i=1;i
阅读全文
摘要:妈耶,这个这个大模拟,模拟了我俩小时。 这道题和紫书上上一道题一样,也是卡输入输出的。思路比较明确,设置数组记录是否使用过,记录当前元素序号,以后分开左右循环和上下循环,每次循环都保证从下一个有效单词开始,把它加入对应向量中。最后统一排序输出。 注意: fill来填充顺序表时,最好全部填充,不然容易
阅读全文
摘要:这题太能卡人了,都是输入输出卡的。 1.输入的5X5矩阵中,有时一行最后有多个空格和回车 2.输出格式中,每两个输出结果之间间隔一个空行,但是最后一个结果之后没有空行。 3.有时到第四位元素,直接不按空格,直接换行了。 其实思路很简单,先判断是否运动越界,如果是的话就输出无答案,如果没越界,就依次将
阅读全文
摘要:这个题看着很简单,但是卡了我好几个点。 1. 输出格式 。题目要求每两个输出数据之间间隔两个换行符,也就是间隔一个空行,而不是空格,最后一个数据只输出一个换行符。一般的方法就能处理过去。 2. 极端情况 。这种包含对称啊,镜像啊,重叠啊,周期啊,什么的,一定要考虑到如果整个串都不满足条件,应该怎么办
阅读全文
摘要:厚颜无耻的自认为比较短,单个字符串复杂度o(n),逻辑比较清晰。 到网上看了看别人的代码,有更短的,是充分利用了题目中单个分子数量2 using namespace std; map mp; //存储分子量映射的值 int main() { ios::sync_with_stdio(false);
阅读全文
摘要:水题。可以不用字符串,只用getchar
阅读全文
摘要:一道水题,我用的将能够生成的所有string都存在vector里,然后开始遍历其中每一个,利用C++字符串可以进行比较的特性输出结果,对单个字符串来说,假设其长度为n,则复杂度为o(n n); 汝佳大佬的程序直接用了下标,看起来简洁,但是复杂度也是o(n n)。 第一个是我的程序。 C++ incl
阅读全文
摘要:我还想把它当成一道数学题做,但是发现代码实现太繁琐。直接搜索肯定会超时的,所以我要确定遍历的区间。区间的上界我找到了,但是我无法准确的确定区间下界。所以我觉得这个方法不靠谱,就看了题解。 题解用的预处理,先把所有十万以内的正整数都遍历一遍,得到离i最近的以i为最小生成元的数t。以t为下标,将i赋值给
阅读全文
摘要:看了半天,没看题解和原题,照着汝佳大佬那两句汉语解释(真的是只有两句啊!)敲了很久,愣是怎么调都调不对,并且最后发现我采用的算法不相容,两种用例一定有一个不满足,是个逻辑错误。我先是怀疑题目出错了,想放一边不管了,但是到网上一搜题解,才发现别人也被题意绕晕了,毕竟全英的,还特别长。找了好几篇博客读中
阅读全文
摘要:这么简洁的算法我没有想到。这个题目算法如此简洁的原因在于常量数组m(存放镜像元素)的应用和镜像字符转化函数的定义、使用。 程序中有好几个注意点,我会在代码中提及。 C++ include using namespace std; const char m="A 3 HIL JM O 2TUVWXY5
阅读全文
摘要:可能是因为输入里面有换行符?我的只识别一行字符串的程序没过。 又是getchar(),用了之后存都不用存,一个字符处理一次,直接输出,很适合这类只需处理单个字符的题。 C++ include using namespace std; char mp[]="`1234567890 =QWERTYUIO
阅读全文
摘要:我还搞了string,什么流输入输出储存,花里胡哨的也没啥大用,汝佳大佬一个getchar就解决了,数据存都不用存。 大佬写的。 C++ include using namespace std; int main() { int c,q=1; while ((c=getchar())!=EOF) {
阅读全文

浙公网安备 33010602011771号