ACM —— 思维
文章平均质量分 73
Konjac.k
这个作者很懒,什么都没留下…
展开
-
HDU 6038 Function(找循环节)
题目:点击打开链接题意:给两个数列a[n],b[m],要求满足一个函数f(i)=bf(a[i])。定义域0-n,值域0-m解释样例2:a={2,0,1},b={0,2,3,1}f(0)=bf(2)f(1)=bf(0)f(2)=bf(1),这个例子的可以取得可能有,令f(2)=0,根据上式推得f(0),f(1)都为0;令f(2)=2,3,1,也容易推出该函数成立。所以ans=原创 2017-07-29 14:38:15 · 236 阅读 · 0 评论 -
HDU 4472 count(递推)
题目:点击打开链接题意:构造一棵树,这棵树的每一层中的节点所拥有的子节点数相等,问有多少种构造方法。思路:对称性。根据题意,可以想到,把这棵树从中间劈开,两边一定是对称的,继续劈开左右两边的子树,依然对称。用a[i]表示节点数为 i 的树的构造方法数,a[j]表示节点数为 j 的树的构造方法数,其中 j 代码:#include using namespace std;cons原创 2017-09-16 10:13:29 · 296 阅读 · 0 评论 -
HDU 6180 Schedule(贪心)
题目:点击打开链接题意:给你n个项目的开始时间和结束时间,问至少需要多少个机器能做完所有的项目。每个机器在某一个时刻被启动后只能运行到某一个时刻停止且停止后不能再次启动。还问用这最少个数的机器做完所有的这些项目所需最少时间是多少。思路:求至少要多少台机器:把这n个时间段在一维上转化成一个入点和一个出点,这样存下2*n个点,之后按坐标从小到大给这2*n个点排序(坐标相同的点出点优先),之后遍原创 2017-08-30 14:54:20 · 368 阅读 · 0 评论 -
HDU 6166 Senior Pan(思维 最短路)
题目:点击打开链接题意:给一个有向图,n个点,m条边。给k个其中的点,求这k个点相互之间的路径值的最小值是多少。思路:如果是暴力枚举这k个点到其他k-1个点的最短路取最小值一定是超时的。正确做法是每次将k个点划分成两个集合,求这两个集合的最短路,取最小值。划分的方法应该保证这k个点均相互求过最短路,且划分次数不应太多以免超时。这道题最难想到的是对这k个点进行划分,这里方法是这样的:原创 2017-08-23 17:03:39 · 348 阅读 · 0 评论 -
HDU 6170 Two strings(dp)
题目:点击打开链接题意:给定两个字符串,假设为串a,串b。a由大写字母和小写字母组成,b由大写字母,小写字母,”.“,”*“ 组成。其中”.“可以代替任何的一个字母,”*“与其一个前缀如a*可代替a,aa,aaa...,以及空。(在这里注意的是a*可以是空 意味着*前面的一个字符和*可以一起去掉而不是只有*被去掉 比赛的时候题意理解错了QAQ) 最后判断a,b是否匹配。思路:比赛时暴力看错原创 2017-08-23 14:40:02 · 187 阅读 · 0 评论 -
HDU 6153 A Secret(kmp)
题目:点击打开链接题意:给两个字符串S1,S2,求S2中每个后缀子串在S1中出现的次数*该后缀子串长度,最后将所有这些求和。思路:kmp是复杂度O(m+n)的较快的字符串匹配算法,但如果取出每个后缀子串进行字符串匹配的话是O(m(n+m))也就是O(n^2)的复杂度,则超时。所以该题只能一遍kmp找到并记录S2中每个后缀子串出现的次数,这就要求对kmp的内部运行十分了解。首先kmp是从头往原创 2017-08-21 15:22:26 · 261 阅读 · 0 评论 -
HDU 6154 CaoHaha's staff(找规律)
题目:点击打开链接题意:给定一个面积值,要求在单元网格上面能围成大于等于该面积值的最短周长所需多少步。围成的周长所用的边(也就是每一步的走法)只能沿着单元格的四条边或是单元格的对角线。思路:题目要求大概可概括为给定面积求步数,我们反过来推算给定一个步数,或者说每让你走一步,可以围成最大多大的面积。前几个可能会看不出规律,多推几个,可发现一个周期 4,网格上的图形是个矩形,四边通过依次增加步原创 2017-08-21 14:44:11 · 191 阅读 · 0 评论 -
HDU 6103 Kirinriki(尺取法 思维)
题目:点击打开链接题意:给一定值m和一串长度为2~5000的字符串,要求从其中取出两个不重叠的长度相等(假设为n)的子串A,B,使得i从0到n-1求和abs(Ai-Bn-1-i)的值≤m,求最大的子串长度n值。思路:以前没做过之类题目,通过题解总结到这类找满足某一大小关系之类的条件最优子串或者连续子序列长度的题一般用尺取法。也即是取一中间点 t,A从1到 t,B从 t+1 到 t+1+t。原创 2017-08-11 13:56:07 · 280 阅读 · 0 评论 -
HDU 6143 Killer Names(dp 思维)
题目:点击打开链接题意:给人起名字,姓 和 名,都是长度为n的字符串,要求从给定的m个字符中选取一些字符(相同或不同都可以),使得没有一个字符同时存在于姓和名中。思路:相当于涂色,给m个颜色,为两个长度为n的单元格涂色,要求两个区域没有共同的颜色。这个题的方法就是先解决姓,得到长度为n的分别用了j=1->m种颜色的方案数,那么对于名,就是(m-j)^n,即剩下的颜色填到n个格子的方案数。原创 2017-08-18 12:33:45 · 191 阅读 · 0 评论 -
HDU 6092 Rikka with Subset(01背包 思维)
题目:点击打开链接题意:给你n,m。有一个数列a,a中有n个元素。输入m+1个数,第i个数表示把数列a当成一个集合,集合a的 和为i的 子集 的个数为b[i],集合a中所有数之和为m。解释样例1:m+1个数为1 1 1 1,表示集合a中和为0的有1个(空集),和为1的有1个({1}),和为2的有1个({2};{1,1}不行,因为{1}只有1个),和为3的有1个({1,2}),且所有数之和原创 2017-08-09 15:33:36 · 269 阅读 · 0 评论 -
HDU 6060 RXD and dividing(思维)
题目:点击打开链接题意:这道题看了两天才看懂,zz。。。说是什么高大上的Steiner树,其实并不高大。又他本来给的就是一棵树,所以也不是最小生成树。大概意思是有一棵树,顶点从1到n;有n-1条边,每条边有个权值;要把从2到n的n-1个点分到k个集合Si里去,每个集合不能有相同的点,然后f(Si)是从点1连通集合Si中所有点之后的边权和,说是什么最小和,其实就是和,没有什么是不是最小,分好集合原创 2017-08-02 12:42:54 · 243 阅读 · 0 评论 -
HDU 6040 Hints of sd0061(STL nth_element函数)
题目:点击打开链接题意:输入五个数值:n,m,a,b,cn的用处为:调用n次题中给出的函数,生成一个长为n的数列m为m次查询,每次查数组a里第bi小的数a,b,c即所给函数中的x,y,z初值要求依次输出查到的数思路:这里用到一个STL的nth_element(a,a+k,a+last),该函数可以使得第k大元素在k位置上(下标从0开始),并且把比该元素小的元素放前面,大的元原创 2017-07-29 16:02:26 · 216 阅读 · 0 评论 -
HDU 6186 CS Course(位运算 思维)
题目:点击打开链接题意:给你n个数,q次查询,每次查询的输出为去掉第q个数之后的n-1个数的与运算、或运算、异或运算结果。思路:首先异或运算的特征,边读入边异或,最后查询哪个在与之异或即可;对于与运算,想到多个二进制数相与,只要某个数的某一位上是0,与运算的结果该位上的数为0,所有数的该位上的数都为1时结果才为1;对于或运算,只要某个数的某一位上的数为1,结果为1,所有数该位为原创 2017-09-16 10:30:35 · 419 阅读 · 0 评论