练习题
忆南妄北
这个作者很懒,什么都没留下…
展开
-
hdu5533 Dancing Stars on Me (思维题)
题目地址hdu5533题目大意给出n个点,问你能不能凑成一个正n边形。解题思路非常有意思的一个题。想要形成正n边形,两个点之间的距离必定是它周围的点之间的最短距离。那我们把每个点和其他边的距离存下来,查找到其中相等并且最短的边数量,如果等于n就能凑成正n边形。AC代码#include <iostream>#include <cmath>#include &...原创 2020-04-20 20:38:05 · 163 阅读 · 0 评论 -
历届试题 包子凑数 (完全背包+最大公约数)
题目地址包子凑数解题思路首先呢如果n个数的最大公约数不为1,那他们不凑的数字肯定无情多个。因为n个数字的最小公倍数就是最大公约数的倍数。如果最大公约数为1,就使用完全背包解题即可。AC代码#include <iostream>using namespace std;int num[110*110], a[200];int gcd(int a, int b){...原创 2020-04-20 20:07:13 · 769 阅读 · 0 评论 -
历届试题 分巧克力 (二分)
题目地址分巧克力解题思路二分查找长度,每次判断能不能凑成,能凑成就继续往上查找,否则向下查找。AC代码#include <iostream>using namespace std;int main(){ int N,K,r=100001,l=1,ans=0,h[100000],w[100000]; cin>>N>>K; for(int i=...原创 2020-04-20 20:02:58 · 231 阅读 · 0 评论 -
历届试题 Excel地址
题目地址Excel地址解题思路像正常的进制转换处理就行,但是需要注意的是对于像26这样的数字,输出的是Z,如果是真正的进制转换的话就是10了。因此每次取模完成后,要把取模后的数字给减去,并且如果得到的0,就要给变成26在减去。AC代码#include <iostream>using namespace std;char a[2000];int main(){ ...原创 2020-04-20 19:59:38 · 135 阅读 · 0 评论 -
历届试题 青蛙跳杯子 (BFS)
题目地址青蛙跳杯子解题思路通过bfs来做这个题,每次判断一个和我们要的字符串是否相同。只要相同就直接输出当前的步数,因为bfs每个循环都会使得每一个状态的计数器加一,因此再往后找到的肯定比当前的步数多。需要剪枝的是可能会出现重复的字符串,这个时候就不要在放入队列中了,否则会超时的。AC代码#include <iostream>#include <queue>#...原创 2020-04-20 19:50:00 · 281 阅读 · 1 评论 -
历届试题 发现环 (并查集+DFS)
题目地址发现环解题思路通过并查集判断出图的环,然后dfs查找到它所在环的路径,得到顶点数组,进行一次排序输出。虽然题目没说,但我觉得应该就是一个环,这样就能保证把环里的顶点全都不重复的放到数组里了。因此dfs放在循环里和循环外都行,memset写不写也都行。AC代码#include <iostream>#include <queue>#include <...原创 2020-04-20 18:04:16 · 222 阅读 · 1 评论 -
历届试题 小数第n位
题目地址小数第n位解题思路解题思路,就是像我们平时做除法那样就可以了,首先把被除数变得比除数小,也就是a = a%b 或者是a = a - a/b*b,这样接下来的除法得到的就是小数点后的数字了。接下来被除数每次乘上十然后除以除数,然后被除数减去得到的商乘上除数,然后在乘十计算,一直到第p个小数位。AC代码#include <iostream>using namespac...原创 2020-04-20 17:53:12 · 134 阅读 · 0 评论 -
历届试题 合根植物 (并查集)
题目地址和根植物解题思路由于题目告诉了谁和谁已经和根了,就直接使用并查集就可以了,最后从1到n遍历f数组,检查有多少种数字,就代表多少株植物。AC代码#include <iostream>using namespace std;int f[1000009];int vis[1000009];int Map[1000009];void init(){ for...原创 2020-04-20 17:42:36 · 186 阅读 · 0 评论 -
poj1011 Sticks (DFS)
题目地址poj1011题目大意给n个小木棍,要求你把这些小木棍拼成长度相同木棍,并且长度越小越好解题思路首先我们应该确定能够拼成的长度,下限是n个木棍中最长的长度maxlen,上线就是n个木棍的长度之和sum。由于题目给的数据并不大,我们可以从maxlen一直遍历到sum,查找到一个符合条件的长度。查找的过程不难看出可以使用深搜来做。深搜得确定好边界,当n根木棍均用完且凑出来了m个...原创 2020-04-13 18:53:17 · 189 阅读 · 0 评论 -
洛谷3964 松鼠聚会
题目地址p3964解题思路首先学习一下曼哈顿距离和切比雪夫距离即二者之间的转换。那根据切比雪夫距离的定义,只要x, y这个点到它周围八个点的距离都是一的话,就是使用的切比雪夫距离。对于给出的n个点,选择其中一个点并计算它到其他点的距离的话,由于切比雪夫距离定义为:d = max(|x1 - x2|,|y1 - y2|) 。计算所有点到当前点距离的时间复杂度为O(n)。那n个点就是O(n2...原创 2020-04-12 12:41:36 · 117 阅读 · 0 评论 -
hdu2552 三足鼎立
题目地址hdu2552解题思路首先正常的算一下哈。arctan(1 / v) = arctan(1 / s) - arctan(1 / u)设 x = arctan(1 / v)那 1 / v = tan(x)既 v = 1 / tan(x)然后直接输出v * u - s * u - s * v后来看了讨论发现,结果只会是一。。。。。AC代码#include <iost...原创 2020-04-12 10:33:34 · 150 阅读 · 0 评论 -
约瑟夫环问题求解方法总结
约瑟夫环问题n个人围成圈,从第一个人开始报数,数到k的人自杀。然后自杀的下一个人接着从1开始数,一直到剩下最后一个人。一,使用队列模拟过程首先将这n个人入队,然后开始计数,并且不断地出队,如果当前这个人是k的倍数的话就杀掉,如果不是k的倍数就再次入队。代码如下:#include <iostream>#include <queue>using namespac...原创 2020-04-12 09:51:36 · 454 阅读 · 0 评论 -
hdu1789 Doing Homework again (贪心)
题目地址hdu1789题目大意给出n个作业的截止时间,然后给出如果不完成第i个作业会扣多少分。每天只能做一个作业,问你最少扣多少分。解题思路我第一次呢是先按照截至时间从大到小排序,如果截至时间相同,就按照扣分从大到小排序。从第0天开始向后走,只要当前天小于第i个任务的截止时间,当前天加一,i+1。第三个样例就没过。为什么呢? 比如一个任务截止时间为第一天,扣一分,另一个任务第二天,扣...原创 2020-04-11 19:35:18 · 132 阅读 · 0 评论 -
hdu1281 棋盘游戏
题目地址hdu1281解题思路很明显的一个二分图题目,可以使用匈牙利算法进行求解。还有一个问题就是怎么判断一个点是不是关键点呢?我们可以把当每个点依次设置为不可放点,然后在用一遍匈牙利算法如果求出来的数量变少了,那它就是一个关键点。AC代码#include <iostream>#include <cstring>using namespace std;i...原创 2020-04-11 19:27:34 · 115 阅读 · 0 评论 -
hdu5688 Problem D
题目地址hdu5688解题思路对每一个给出的字符串,进行排序,然后使用map记录出现的次数。这里我用的unordered_map,不知道map能不能过。AC代码#include <iostream>#include <algorithm>#include <unordered_map>using namespace std;int main...原创 2020-04-11 19:23:21 · 98 阅读 · 0 评论 -
hdu5339 Untitled
题目地址hdu5339题目大意给一个数字a和序列b,问你最少在序列中选择多少个数字进行a%b[i]操作能够使得a变为0,找不到这样一个序列输出-1。解题思路不要给自己加戏,各种花里胡哨不需要的。n的范围是20,只要处理一下数据dfs即可。我一开始并没有处理数据,直接进行dfs,导致了超时。那怎么处理数据呢?比如a = 18, b = {2, 7}。很显然先模7,在模2就能够让a变为0...原创 2020-04-11 19:18:04 · 137 阅读 · 0 评论 -
hdu2368 Alfredo's Pizza Restaurant
题目地址hdu2368题目大意给三个数字,分别是圆半径,矩形长宽。问能不能把这个矩形放到圆里解题思路正好放下的情况是这样,此时矩形的对角线长等于圆的直径。那我们根据这个条件作为判断依据,只要对角线长小于等于圆的直径就能放进去。AC代码#include <iostream>#include <cmath>using namespace std;int...原创 2020-04-11 19:12:42 · 154 阅读 · 0 评论 -
hdu2575 Count Problem
题目地址hdu2575题目大意给一个数字,可以在最左边加数字,但不能比原数字第一位的一半多,问有多少种。解题思路由于添加数字只与给出的数字第一位有关,因此我们可以不用管后面,只看第一位就行。第一位最多十种可能,在纸上直接算出来多少种就可以了。AC代码#include <iostream>using namespace std;int main(){ int t...原创 2020-04-11 19:09:08 · 101 阅读 · 0 评论 -
hdu1152 Brownie Points I (水题)
题目地址hdu1152题目大意给出奇数个点,以中间那个点做原点,问你一,三象限和二,四象限的点分别是多少。坐标轴上的点不算。解题思路遍历判断一下就行了。AC代码#include <iostream>using namespace std;int a[200010], b[200010];int main(){ int n; while (cin &g...原创 2020-04-08 22:12:25 · 117 阅读 · 0 评论 -
hdu2105 The Center of Gravity
题目地址hdu2105题目大意给出三角形的三个顶点坐标,让你求出其重心的坐标解题思路观察样例可以看出重心的坐标为 [(x1 + x2 + x3)/2 ,(y1 + y2 + y3)/2]。证明过程:已知重心向量定理:OA + OB + OC = 0,设O点坐标为(x0,y0)由重心向量定理得到 x1 - x0 + x2 - x0 + x3 - x0 = 0因此xo = (x1 ...原创 2020-04-08 22:00:36 · 167 阅读 · 0 评论 -
hdu2563 统计问题
题目地址hdu2563解题思路由于不能往下走,所以前三步的情况如下图从图中第三步可以看出 Dn = Dn-2 * 3 + (Dn-1 - Dn-2) * 2 ,也就是三个可以走三步,四个可以走两步。AC代码#include <iostream>using namespace std;long long sum[30];void init(){ sum[0]...原创 2020-04-08 21:22:58 · 192 阅读 · 0 评论 -
hdu2084 数塔
题目地址hdu2084解题思路简单的dp转移方程为 dp[i][j] = max(dp[i-1][j-1], dp[i-1][j])AC代码#include <iostream>#include <cstring>using namespace std;int dp[110][110];int main(){ int t; cin >...原创 2020-04-08 20:23:19 · 86 阅读 · 0 评论 -
hdu-6033 Add More Zero
题目地址hdu6033解题思路已知一个整数n, 想求它的位数,可以使用log10(n)来求。为什么呢?因为log10(n) = x,也就是10x = n。 那么只要求出int(x)就是n的位数。对于这个题n就是 2n,位数即int (log10(2 n )),通过对数的性质可得到int (nlog10(2)).解题思路#include <iostream>#inclu...原创 2020-04-06 19:56:35 · 130 阅读 · 0 评论 -
hdu2149 Public Sale
题目地址hdu2149解题思路使用巴什博弈就能做这道题。先说一下巴什博弈是什么,两个玩家,共有m个物品,每个人每次最多取n个,最后正好取空的人获胜。假设m = (n + 1),那无论当前这个人取多少,下一个人都必胜。所以对于m个物品可以写成m = (n + 1) * r + s,那么只要第一个人先把多出来的s个取完,然后第二个人无论取多少,第一个人都给凑成n + 1个,第一个人一定是必...原创 2020-04-06 11:03:31 · 121 阅读 · 0 评论 -
hdu5858 Hard problem
题目地址hdu5858题目大意给出正方形边长l,让你求出阴影部分面积。前提须知一,三角形面积公式:1,已知三角形底a和高b:s = a * b / 22,已知三角形三条边长a, b, c:p = (a + b + c) / 2s = sqrt(p * (p - a) * (p - b) * p - ( c ))3,已知三角形两边a, b 以及夹角angle_c:s = a ...原创 2020-04-06 10:28:18 · 172 阅读 · 0 评论 -
hdu2502 月之数
题目地址hdu2502解题思路设共有初始sum = 0,为1的个数。给出n,以1开头的二进制共有2n-1个,那sum += 2n-1。然后再看后面的n-1位,那就是一个高中数学知识的运用,首先再n-1位中选择1位放1,就是组合数C1n-1,然后是选择两位放1 C2n-1 …一直到n-1。对于C2n-1来说,他是n-1位中放一个1的可能性,那实际1的个数位2 * C2n-1。这里的组合数用的...原创 2020-04-05 19:59:31 · 135 阅读 · 0 评论 -
hdu2128 - 哈密顿绕行世界问题
题目地址hdu2128解题思路使用dfs搜索一下就能过,对于需要字典序从小到大排序,我们可以预处理给出的边。将与第i个点相连的边按照从小到大的顺序排好。由于dfs时是从0到n的,这样就保证了字典序从小到大。还有一点注意的是给定的m点在一开始就被标记了,当再次访问到它的时候step必须等于19才能访问。AC代码#include <iostream>#include <...原创 2020-04-05 19:42:32 · 155 阅读 · 0 评论 -
Kolakoski序列
定义Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。他的前几项为1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,1,1,2,1,2,2,1,1,…(OEIS上的A000002)它的定义很简单,若把数列中相同的数定为一组,令a(1)=1,a(2)=2,则a(n)等于第n组数的长度。可以根据这个定义来推算第三项以后的数...原创 2020-04-03 08:02:14 · 851 阅读 · 0 评论 -
hdu-2265 Encoding The Diary (水题)
题目地址hdu2265题目大意给一个字符串,删去其中的空格形成新串,对于新串,先输出3和3的倍数的字符,然后输出2和2的倍数的字符。最后把剩下的每输出的输出即可。解题思路无,水题一道。标记一下当前位是否输出即可AC代码#include <iostream>#include <string>#include <cstring>using na...原创 2020-04-02 21:00:41 · 169 阅读 · 0 评论 -
hdu-2110 Crisis of HDU
题目链接hdu2110题目大意给出n种财产的价值和数量,问你有多少种方法组成总价值的1/3。解题思路假设财产总价值为sum,首先特判sum是否能够整除3,如果不能的话直接输出sorry。因为sum无法整除3,就更不会有1/3的财产了。如果sum能够整除3,接下来使用母函数或者dp解题。这里使用母函数进行解题。写出函数:(1 + xa1 + x2a1 + … + x1/3sum)(...原创 2020-04-02 19:38:20 · 131 阅读 · 0 评论 -
hdu-1398 Square Coins
题目地址hdu1398题目大意已知有1 * 1,2 * 2,3 * 3,…17 * 17这17种硬币,给你一个n,问你这十七种硬币凑n的方法有多少种解题思路很明显是一个母函数例题。写出函数:(1 + x1 + … + xn)(1 + x4 + x8 + … + x4*n) …还是通过循环求出各项相乘后的结果,放入一个数组中。问n有多少种,直接输出xn前面的系数即可。AC代码#i...原创 2020-04-02 19:10:15 · 96 阅读 · 0 评论 -
hdu-1171 Big Event in HDU
题目地址hdu-1171题目大意给出n种物品,和其数量,现在想让你把这些物品分成两堆,其重量如果可以一样(因为物品不能分割),输出其重量,不可以的话就让a多分一点,b少分一点。解题思路很明显可以使用母函数来做这个题。老规矩,写出函数:(1 + xa1 + … +xm1a1)(1 + xa2 + … + xm2a2) …通过循环求出各项相乘后的结果,也就是最后的形式是 1 + xa1 ...原创 2020-04-02 19:03:57 · 144 阅读 · 0 评论 -
hdu1085 Holding Bin-Laden Captive!
题目地址hdu1085题目大意有1,2,5三种币值的硬币,现已知三种硬币各有a, b, c多少个,问你这些硬币不能凑的最小币值是多少?解题思路使用母函数求解,能够写出方程 (1 + x1 + x2 + …+ xa)(1 + x2 + x4 + … + x2*b)(1 + x5 + x10 + … + x5c)通过循环模拟上面的式子即可,从0开始遍历,找到一个x的系数为0,代表没办法组成...原创 2020-04-02 10:04:25 · 126 阅读 · 0 评论 -
hdu2152 Fruit
题目地址hdu2125解题思路本题是使用母函数,这样就会根据题意构造出来(xa1 + x^a1 + 1^ + … + xb1)(xa2 + xa2+1 + … + xb2)… 通过循环模拟出这n个式子相乘的结果,最后需要的m种就直接输出xm的前面的系数即可。AC代码#include <iostream>#include <cstring>using nam...原创 2020-04-02 09:03:40 · 124 阅读 · 0 评论 -
hdu1394 Minimum Inversion Number
题目地址hdu1394题目大意给你一个序列,其中每个数字只出现一次并且其数值都小于等于n-1。并且可以把前m个放到序列最后去。这样总共会有n个序列,问你这n个序列中,最少的逆序对是多少。解题思路已知的有暴力和线段树两种做法,我是用暴力做的。我们首先对原串求出逆序对的数量sum,然后通过题中给出的条件我们可以看到,这个序列中共有n个数字,并且只会出现一次,是从0-n-1的,那么对于a[0...原创 2020-04-01 10:07:08 · 103 阅读 · 0 评论 -
hdu5327 Olympiad
题目地址hdu5327题目大意输出给定区间有多少个数字是每一位上都只出现一次。比如1234,34265等等都是符合规则的。解题思路预处理给定区间的所有数字,求一个前缀和,进行查询的时候只需要输出sum[b] - sum[a-b]。AC代码#include <iostream>#include <cstring>using namespace std;...原创 2020-03-31 21:32:01 · 129 阅读 · 0 评论 -
hdu-5706 GirlCat
题目地址hdu5706题目大意找出给出的矩阵中cat和girl的数量,单词可以拐弯。解题思路很明显是一个bfs的题目,这里我对cat和girl写了两个bfs。我觉得深搜也是可以做的,因为深度并不会太大。AC代码#include <iostream>#include <queue>using namespace std;char s[1100][11...原创 2020-03-31 21:13:25 · 289 阅读 · 0 评论 -
hdu-1211 Complete the Sequence
题目地址hdu1211题目大意给你一个序列,让你找出规律并给出接下来得c项解题思路使用差分,也就是不断地求相邻两项之间的差,一直到其所有的差值都相同为止,这个时候在返回去就会得到原序列。例如题中的例三:1 1 1 1 1 1 1 1 1 2 11 560 0 0 0 0 0 0 0 1 9 450 0 0 0 0 0 0 1 8 360 0 0 0 0 0 1 7 280 0...原创 2020-03-31 20:38:50 · 383 阅读 · 0 评论 -
hdu-4925 Apple Tree
题目地址hdu4925题目大意给一个nm的图,分成11的多个格子。每个格子有两种操作,第一种是种树,第二种是施肥,如果施肥的话,其相邻的上下左右格子收益都会变成二倍。问你最多能收获多少苹果。解题思路首先我们看1 * 1 的图,最多收获为1, 1*2最多收获两个,1 * 3最多收获4个,由此类推得到一行的收获为1, 2, 4, 6, 8…通过观察我们发现只有每两棵树之间施肥才能得到最大收...原创 2020-03-31 17:30:59 · 122 阅读 · 0 评论 -
hdu1033 Edge
题目地址hdu1033题意你一开始在(300,420)这个点,向四个方向走,每次走10步,第一次你向下走了10步,然后看输入,若是A就是向右拐,V就是左拐。解题思路控制好面向的方向就好了,主要是题意难理解AC代码#include <iostream>#include <string>using namespace std;int main(){ ...原创 2020-03-30 18:22:27 · 133 阅读 · 0 评论