202109-4收集卡牌
状压dp,注意保留10位小数,是样例里给出的最长的,五位也不行,double保留到小数点后15位以后就不准了
202104-2 邻域均值
要利用前缀和,不然会超时
202012-2 期末预测之最佳阈值
也是要利用前缀和,首先按值的大小排序,然后再按0和1排序,用前缀和计算0出现的促使,用后缀和计算1出现的次数,最后计算这个值的正确次数,是计算比他小的0(相当于第一次出现这个值的前一个的前缀)和比他大的1(直接就是这个值的后缀)
0 | 0 | 1 | 1 | 1 | 1 | cnt |
0 | 1 | 1 | 3 | 5 | 7 | data |
1 | 2 | 2 | 2 | 2 | 2 | prefix |
4 | 4 | 4 | 3 | 2 | 1 | suffix |
比如取第二个出现的1是取第一个出现的1的前一个加上对应的后缀
201912-2 回收站选址
用map嵌套就不行,用pair就可以,注意一下pair的应用
201909-1 小明种苹果
把m,n输入反了,刚好测试用例里面m和n的值相等,所以怎么看怎么看不出错来
应该是cin>>n>>m;
不是cin>>m>>n;
给哥们逗乐了
201903-1 小中大
说保留1位小数就老老实实的用printf,别想着/2以后肯定只有一位小数,谁知道人家测试点里有什么东西
201903-2 二十四点
核心思想还是将数字和运算符分开两个运算,
拿9+3+4x3举例
初始状态,设指针位置为i,总长度为k
因为运算有先算乘除后算加减的要求,所以第一遍先从左到右遍历,先算乘除
让i+1等于运算后的结果,然后a.erase(a.begin()+i),b.erase(b.begin()+i)
然后不让i进行自增,让总长度总长度减一继续判断
再来一遍算加减就可以了
201809-2 买菜
这道题相当于求多条线段的公共区域,直接平铺,设一个总长度够大的数组来代表时间轴,当有人在的时候让这段时间轴++,当这段时间轴==2的时候就是两个人都在的时候
201712-2 游戏
这道题很类似与约瑟夫环,但是不能用约瑟夫环的公式,因为
约瑟夫环仅满足k的倍数,而不满足末尾数为k
但是还是可以复习一下约瑟夫环,看看自己的博客:约瑟夫环原理及其公式_Elephant_King的博客-CSDN博客
这道题一开始得20分就是自己没读清题,末尾数为k的,不是位数中含有k这个数的,只用判断t[t.size()-1]是不是等于k就行了,不用管其他位
201703-2 学生排队
之前没得满分是因为插入和删除,还有下标开始的时候整的有点乱
现在让下标从1开始,先进行插入操作,再进行删除操作
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
初始情况
第一步:3号同学后移两位
首先先进行插入操作,首先找到需要修改位置数字的下标pos,然后单独存储下标到一个变量
因为插入的位置是给定下标之前,所以向后插入应该在pos+cnt的基础上再加1
pos | pos+cnt | pos+cnt+1 | ||||||
1 | 2 | 3 | 4 | 5 | 3 | 6 | 7 | 8 |
在pos+cnt+1的前方插入对应数字3
然后进行删除操作
直接删除pos就可以了
pos+cnt | pos+cnt+1 | ||||||
1 | 2 | 4 | 5 | 3 | 6 | 7 | 8 |
注意:一定要将pos单独存储为一个变量,向后插入看不出来效果,但是向前插入如果在寻找对应要删除的pos,会首先搜索到新插入要保留的pos而不是要删除的旧的pos
第二步:将8向前移动三位
先进行插入,因为向前移动,应该插入在pos-cnt前面,就不用额外加1了
pos-cnt | pos | |||||||
1 | 2 | 4 | 5 | 8 | 3 | 6 | 7 | 8 |
插入对应位置,然后删除
因为在原本的pos前面插入了一个数据,所以对应要删除的地方变成了pos+1
pos-cnt | pos | ||||||
1 | 2 | 4 | 5 | 8 | 3 | 6 | 7 |
删除完成,后面流程类似