wtpavssite

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

截至周六晚一共独立做出题目5道CF,三道码题集题目。分别的算法标签是模拟(8);
做错的题(还没有补):
CF:1.MIXING WATER没有判断出数据的单调性,所以没有二分,再者,二分的题也已经好久没做,有些生疏
2.SHIFTED MEX一开始思路是对的,但是太复杂了,代码实现起来也比较麻烦,导致用了很多时间,看AI说是一个思维题,看出来枚举之后确实是思维题,刚好可以把要求的转换成其他的更只管的概念
码题集:1.奇偶序列思路想的太乱了,也是模拟能做出来,这种遇到思路太乱的情况,应该找到应对的方法,这也不是第一次遇到这种情况了
2.升级版斐波那契数列不会高精度计算
3.快速幂也是不会快速幂的写法
4.循环空间一开始被边界的循环给吓到了,结果直接对其+n再取模就可以做到这种空间的循环,然后就是一个简单的BFS,加上这道题,是这两周写的第三个BFS了,所以BFS下次应该更有信心了
5.上楼梯和上楼梯2最开始是看出来是dp的写法的,但是一直找不出dp的转移方程,但是最开始dp的定义是找对了,我找到一种从反向来推导dp定义的方法,一般dp的题的答案是直接输出dp[n]就可以了,所以那么这道题的dp就应该是走到第n个台阶一共有多少个走法,那么dp[i]显而易见就是第i个有多少个走法
6.竹鼠的白色季节(还没有补)是一个枚举的题
7.A+Bproblem(还没有补)还是一个高精度计算,说明之前补的没有完全学会
一个现在有疑问的算法:二分,之前我理解的二分有两种情况,一种是找到第一个大于x的下标,另一个是找到最后一个小于x的下标,while里面的条件都是(l<r),两者的差别就是mid的计算,前者是mid=(l+r)>>2,后者是(l+r+1)>>2。这周耍英雄的视频讲了一个更加通用的模板,在while的终止条件和mid的计算上都是固定的,根据不同的情况只需要根据情况修改里面的isgreen函数,代码如下
`

点击查看代码 `int binSearch(int *arr,int n,int x){ int l=-1,r=n; int mid; while(r-1>l){ mid=l+(r-l)/2; if(isGreen(arr[mid]x) r=mid; else l=mid; } return r; }`
`(这个代码是返回最小的绿色下标即大于x的最小数)其中的isGreen函数是`int isGreen(int val,int x){ return val>x; }`对于大于等于x的最小数,可以使用>=来写函数内部(返回r);小于x的最大数也是>=返回r-1,小于等于x的最大数,用>返回r-1
posted on 2026-01-25 18:36  wt_pav  阅读(0)  评论(0)    收藏  举报