03 2013 档案

摘要:题意: 给出一个文本串str 给出n个模板串arr 问有多少个模板串可以由文本串中的两段子串组成,且两段子串在文本串中的先后顺序不变。思路: 用两次KMP求出每个子串从第一个字符开始的第一个出现位置和从最后一个字符开始的第一个出现位置 即next[0][i]表示模板串中以i结尾的子串在文本串中第一次出现的位置,next[1][i]表示模板串中以i开始到最后的子串在文本串中最后一次出现的位置 然后看一下是否有next[0][i]<next[1][i+1]的情况存在.. 如果有代表这个模板串可以在文本串中找到符合要求的情况。Tips: ①. 用另外一个字符串来记录翻转的串的时候,要... 阅读全文
posted @ 2013-03-23 10:31 Griselda. 阅读(165) 评论(0) 推荐(0)
摘要:题意: 求1~n以内的无平方因子数的个数。思路: 利用类似筛选法把100010的素数标记出来(预处理) 然后通过容斥原理,把有平方因子数的个数算出来,那总个数-有平方因子个数 = 答案了 n之内有平方因子的数的个数sum =n/(2^2) + n/(3^2)+……+n/(k^2) - n/(2^2 * 3^2)-……+……。Tips: 所谓容斥原理,其实举一个简单的例子就是:一个班里a个同学喜欢吃苹果,b个同学喜欢吃香蕉。问这个班有多少个同学。 如果自己算的话就是a + b - a∩b 这题也一样,把含2的k次方的个数算出来,含3的k次方的个数算出来,含5的k次方的个数算出来,含... 阅读全文
posted @ 2013-03-17 09:46 Griselda. 阅读(280) 评论(0) 推荐(0)
摘要:题意: 给出n个数,让你用最少次数把所有的数都摞成一堆。 其中当把arr[i]摞在第j堆上时,得扣分arr[i] 题目有要求每个数上面不许摞超过k次,有m个k,让你求出m种情况下限制为k时的最优解,即最少扣分。思路: 经过多次推算会发现,如果要最后扣分最少,则应该尽量让arr[i]小的摞的次数比较多,而arr[i]大的摞的次数比较少。 然后还有一个规律是,如果想让扣分最少,那每次应该尽量让值大的堆上摞的次数比较多,本身则尽量少摞。即尽量满足 一次摞足够多的物品。Tips: 如果k = 1,则答案就是arr[1] + (arr[1]+arr[2]) + (arr[1]+arr[2]+... 阅读全文
posted @ 2013-03-17 08:44 Griselda. 阅读(279) 评论(0) 推荐(0)
摘要:题意: 给出n个点的x坐标和y坐标,让你求出由其中三个点组成的三角形,要求这个三角形里面不包含别的点且面积最小。思路: 三角形里面不包含别的点的判断方法是最暴力的一层for循环用面积法看看除去组成这个三角形以外的别的点是否在这个三角形内。Tips: 这题的关键其实只是掌握面积法。即利用差积的方法求面积。Code:View Code 1 #include <stdio.h> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 #include <ctime> 阅读全文
posted @ 2013-03-16 21:24 Griselda. 阅读(322) 评论(0) 推荐(0)
摘要:题意: 给出n行m列的数组,并给出k个操作; 其中操作方法有三种: ① c x y 表示把数组的第x列和第y列交换 ② r x y 表示把数组的第x行和第y行交换 ③ g x y 表示求数组的第x行第y列的数思路: 用一个数组c 和 r表示第c行和第r列当前值是实际数组中的第几行第几列Tips: 因为n m k给的值都很大 所以如果按暴力模拟的话,即一个一个交换就会超时 所以想到用一个虚拟的数组保存当前数组的每一行每一列在原数组中的哪一行哪一列Code:View Code 1 #include <stdio.h> 2 #include <cstring> 3 #incl 阅读全文
posted @ 2013-03-16 21:18 Griselda. 阅读(309) 评论(0) 推荐(0)
摘要:题意:给出n张牌的重量和现在剩下的牌的重量。求缺失了的牌。如果无解就输出0 多解就输出-1 否则就按照输入的顺序输出排的编号思路: 01背包.. 状态转移用dp[v] = cnt;表示牌的总和为v的情况是为cnt 记录路径有path[v] = j; 表示是加上了第j个物品才得到体积为v的。 一开始有一个已知的是dp[0] = 1; 状态转移方程为 if(dp[j-w[i]])dp[j] += dp[j-w[i]]; 表示当前一个状态存在的情况下,这一个状态的情况数为前一个状态加上当前这个状态的情况数。 因为题目要求给出缺失的牌的编号,所以如果dp[j] == 0,即第一次遇到这个情... 阅读全文
posted @ 2013-03-16 21:08 Griselda. 阅读(354) 评论(0) 推荐(0)