一、HDU 4548 美素数
做题感悟:这题是在比赛时做的,开始没做这题,看见有三个人 AC 而且没超时现象,所以……
解题思路:用线性筛法(在本题与一般筛法时间一样)把素数筛出来,然后判断是否为美素数,可以把美素数存起来或者选择二分(内存少)。
代码~>
二、HDU 4515 小Q系列故事——世界上最遥远的距离
做题感悟:开始写完代码时差点要提交但是又测试了几组数据不可以,又改了一下才可以,幸好没交,所以以后提交一定要淡定,多试几组测试数据,代码有点乱。
解题思路:这题属于练习代码的题,俗称模拟题,1A。
代码~>
三、HDU 4143 A Simple Problem
做题感悟:这道题是简单数学题,开始想到方法了,但是求出的 X 值不是最小的,这一点没考虑到。
解题思路:化成平方差的形式,( y - x ) * ( y + x ) = n , y - x = a , y + x = b , 解得:x = ( b - a ) / 2 ,要想 x 最小,b 与 a 应该尽量接近,应该从 sqrt ( n ) 开始到 1 遍历。
代码~>
四、HDU 4525 威威猫系列故事——吃鸡腿
做题感悟:开始做这题时在调用函数时就犯一个致命的错误,传递的是 double 类型的,但是形参我用的是 int 类型的导致超时,之后跟别人讨论了一下才出来。感觉这种题应该多思考一下,这样可以提升做题的能力,毕竟以后单挑的形式多。
解题思路:把给的公式两边分别加起来你就会发现,其实体重增长是一个等比数列,注意开始如果就大于 k 时输出 0 天。
代码~>
五、STL之Vector
vector 我很早时就听说了,只是迟迟没学习它。vector和C++ 的string 类形式一样,string 相当于数组存字符串。vector相当于数组(可以用数组的形式也可以不用),只是添加元素时开辟空间。
头文件:#include<vector> + using namespace std ;
基本运算:
v.empty( ) 判断是否为空
v.size( ) 返回容器中数据个数
v.clear( ) 清除元素中所有数据
v.erase( pos ) 删除 pos 位置的数据
v.erase( beg,end ) 删除 [ beg , end ) 区间的数据
v.front( ) 返回第一个数据
v.insert( pos ,elem ) 在 pos 位置插入一个 elem 拷贝
v.pop_back( ) 删除最后一个数据
v.resize( num ) 重新设置容器大小
v.begin( ) 返回指向第一个数据的迭代
Vector 相关博客~>
六、HDU 1800 Flying to the Mars
做题感悟:这题属于想法题,开始第一次做时想到了,第二次又去做时居然想了老半天。
解题思路:最多的相同等级的士兵 = 最少数量的扫帚 ,可用 sort 排序,map,字典树。
代码: sort 排序~> 字典树~> map~>
七、HDU 4287 Intelligent IME
做题感悟:因为在研究字典树,so 这题一看就是字典树+深搜,另一种比较巧妙的方法真没想到。
解题思路:这题可以用字典树+深搜做,也可以用map解决(将字符串映射成数字)。
代码:map~> 字典树~>
字典树模版! 静态字典树~>
八、错排
之前做了好几道关于错排的题,于是总结一下。
错排:你封信放入n个信封里,要求全部放错,求共有几种方法,记n个元素的错排总数为F(n)
假设有n封信,将第一封信可以放在 2~n 的任意一信封里,共有n-1 种放法,如果第一封信放在了第k个信封里,若此时第k封信放在了第一个信封里,则只要将剩下的n-2封信错排,即F(n-2)错排,如果第k封信没有放在第一个信封里,可将第1封信的位置看成“第k个位置”,即将n-1封信错排,即F(n-1)
由上可得公式:F(n)=(n-1)*(F(n-1)+F(n-2)) 。
九、HDU 1209 Clock
做题感悟:这题不会钟表时间转化为角度,纠结了很久。
解题思路:先按照角度从小到大排序,如果有相同角度的则时间早的在时间晚的前面。
转化公式: angle =fabs( h * 30 - 5.5 * m )(如果h >12 , h - = 12 这点很重要)
已知三角形三遍 a ,b , c 求 c 边所对应的角度 angle = acos ( ( a*a + b*b - c*c ) / ( 2.0*a*b ) ) * 180.0 / 3.1415926 ;
代码~> 例题:HDU 2076 HDU 2080
十、HDU 3345 War Chess
做题感悟:这题很简单,为什么要写进博客呢 ?我的代码虽然AC了,但是太麻烦!改过之后纪念一下。
解题思路:BFS+优先队列。
代码~>
十一、HDU 2072 单词数
做题感悟:这题其实是一个字典树模版题,但是在输入上恶心了好久具体见代码。
解题思路:字典树,map都可以。
代码~>
十二、HDU 1868 Consecutive sum
做题感悟:明明快做出来啦,只要稍微动动脑筋就可以的事,为甚忍不住搜题解呢!!!!
解题思路:N=(a+1)+(a+2)+......+(a+n)= n*a+n*(n+1)/2;即求该方程的整数解! 个数最多为 N = ( x +1 ) * x / 2 , so~ x<=sqrt( 2 * n )
代码~>
十三、HDU 1214 圆桌会议
做题感悟:一看这题无非是找规律或者有数学方法。
解题思路:方法一、找规律:当你列出 12 个时你会发现把它分成奇数和偶数的情况时,f [ i ] = i - 2 + f [ i - 2 ] ; 方法二、当在一条直线上变成逆序时需要 n*(n-1)/2 次,但这题是环形所以将环分成尽量相等的两部分,求逆序即可。
代码~>
十四、HDU 2154 跳舞毯
做题感悟:通过这题可以明显感觉出只想不动手永远做不出题。
解题思路:因为每次跳有两次选择,所以第 i 次跳共有 2^i,但是求第 i 次必须求第 i-1次有多少选择了A,所以次数就等于 2^( i - 1 ) - f [ i - 1 ] .(这题要注意中间值,有可能溢出)。也可以用dp :动态方程: dp[ i ] = dp[ i - 1 ] + 2 * dp[ i - 2 ] .
代码~~>
十五、BOJ 1023 信息战(九)——水淹七军
做题感悟:这题真是太坑了,也许自己不够灵活,在做不出时应该认真读题,看是否是思路错了。
解题思路:这题其实只要其中一个放水点大于等于司令部就可以把司令部淹没。
代码~>