HDU习题集
自己的hdu刷题笔记
附带题解
Wiz1code(算法号)
这个作者很懒,什么都没留下…
展开
-
HDU 2000
题目描述 解题思路 算法库sort排序输出即可 代码 #include<iostream> #include<algorithm> using namespace std; char a[3]; int main(){ while(cin>>a){ sort(a,a+3); cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl; } return 0; }原创 2021-05-28 20:21:34 · 32 阅读 · 0 评论 -
HDU 1010
题目描述 解题思路 剪枝 剪枝策略就是在搜索过程中利用过滤条件来剪去完全不用考虑(已经判断这条路走下去得不到最优解)的搜索路径,从而避免了一些不必要的搜索,大大优化了算法求解速度,还保证了结果的正确性。 简单的说就是把不可行的一些情况剪掉,例如走迷宫时运用回溯法,遇到死胡同时回溯,造成程序运行时间长。剪枝的概念,其实就跟走迷宫避开死胡同差不多。若我们把搜索的过程看成是对一棵树的遍历,那么剪枝顾名思义,就是将树中的一些“死胡同”,不能到达我们需要的解的枝条“剪”掉,以减少搜索的时间。 奇偶剪枝 把矩阵看成原创 2021-05-28 20:10:05 · 79 阅读 · 0 评论 -
HDU 1001
题目描述 解题思路 方法一 :直接相加求解 方法二:利用求和公式n(n+1)/2,不过这里会爆int,记得开long long 代码 //本处运用法一求解 #include<iostream> using namespace std; int main() { int n; while(cin>>n) { int sum=0; for(int i=1;i<=n;i++) sum+=i; cout<<sum<<endl&原创 2021-05-27 14:21:03 · 36 阅读 · 0 评论 -
HDU 1000
题目描述 解题思路 注意含多组数据 代码 #include<iostream> using namespace std; int main() { int a,b; while(cin >> a >> b) //连续输入输出 cout << a+b << endl; return 0; }原创 2021-05-27 14:26:10 · 75 阅读 · 0 评论 -
HDU 1002
题目描述 解题思路: 直接套个大数加法模板即可 (模板看不懂直接背下来也可以) 注意输出格式的规范 代码: #include<iostream> #include<cstring> using namespace std; int maxn,sum,pos,Begin,End,T,n,a[100005]; int main(){ cin>>T; for(int Case=1;Case<=T;Case++){ memset(a,0,sizeof a)原创 2021-05-27 14:28:45 · 44 阅读 · 0 评论 -
HDU 1004
题目描述 解题思路 利用STL库中的map映射 找出最大值即可 代码 #include<iostream> #include<map> #include<string> using namespace std; map<string,int>m; //利用map映射 int main() { int n; while(cin>>n&&n!=0) { int maxn=-1; //每次都初始化最大值为-原创 2021-05-26 19:55:52 · 52 阅读 · 0 评论 -
HDU 1005
题目描述 解题思路 方法一:找规律 本题的关键是找到循环节,即**(arr[i]==1&&arr[i-1]==1 )** 又是一道给出了运算公式的数学凡是没有优化的话,超时超内存等等是避免不了的了。这题很显然是一个找规律的题目,也就是该题的求解中是存在循环节的。对于公式 f[n] = A * f[n-1] + B * f[n-2]; 后者只有7 * 7 = 49 种可能,为什么这么说,因为对于f[n-1] 或者 f[n-2] 的取值只有 0,1,2,3,4,5,6 这7个数,A,原创 2021-05-27 14:36:18 · 60 阅读 · 0 评论 -
HDU 1008
题目描述 解题思路 简单模拟,设置中间变量temp进行电梯楼层的更新即可 代码 #include<iostream> using namespace std; int main() { int n; while(cin>>n&&n!=0){ int now=0,sum=0,temp; //每次测试记得初始化 for(int i=1;i<=n;i++){ cin>>temp; //中间变量temp if(te原创 2021-05-27 08:24:52 · 82 阅读 · 0 评论 -
HDU 1009
题目描述 解题思路 贪心思想,按性价比从大到小排序 排序后,如果猫粮剩余数量大于某个楼层最大交换量的猫粮,就全部拿走 否则就按照拿走剩余数量*性价比的量 代码 #include<iostream> #include<algorithm> using namespace std; struct A{ double b,c,w; //b是豆子量,c是猫粮量,w是性价比 }num[1005]; bool cmp(A x,A y){ //自定义按性价比原创 2021-05-27 09:12:32 · 49 阅读 · 0 评论 -
HDU 1018
题目描述 解题思路 方法一:N!=123…*n 求位数我们一般用对一个数取对数就可以了 , log10(n!)=log10(1)+ log10(2) +log10(3)…+log10(n); 所以循环求和就可以了! PS: 结果要加1!因为这里计算出来的 log10(1)=0 ! 所以结果要加上这个误差 ‘1’ 方法二:斯特林数(本处不做详解) 代码 //这里用方法一求解! #include<iostream> #include<cmath> using namespa原创 2021-05-27 14:08:11 · 59 阅读 · 0 评论