字符串相关
1.码题集MT2004购买数字
2.洛谷P1106删数问题:虽然是贪心问题,但是一个高精度的整数读入还是用字符串读入,错的原因是一开始没有考虑到左右次序不变,破坏了原来的顺序
3.天梯赛1第六题吉老师的回归:这道题一开始是打算用string带的find函数来实现判断是不是签到题的,可惜对这个函数不是很熟悉,第一次没用对,后来自己写了一个检查函数,交上去没有全对。那就在这里记录一下find函数的用法。这个函数是用来查找字符串是否包含子串xxx的,返回值是字符串中子串的开始的第一个字母的下标。如果没有找到返回npos也就是-1。最开始写的是if(s[i].find("easy")||s[i].find("qiandao")),这个代码的问题就是如果找到了但是位置在0,那么就会认为没找到,如果没找到那么返回npos,而这个npos是size_t类型的也就是无符号整数,最开始是-1(int)转换到无符号就会变成一个很大的数字,而这个数字不是0就会认为是找到了
4.PTASpring天梯赛第一场第七题字符操作,这道题要是完全模拟的话会超时,加速的办法是对于前后两段交换的操作做个标记,因为这个操作可以互相抵消,而考虑到在进行了操作2的情况下进行操作1需要找到交换的映射位置,我觉得这个题最难的点就是这个映射位置的推导。如果我们把左右两段看作不同的字符串的话,计作a和b,那么进行一次操作2,ai会到bi的位置上,相对应bi会到ai的位置。所以公式是(i-1+n)%(2*n)其实我觉得这个公式还是不太好解释想到他的思路,因为我是看答案得到这个公式的。要是强硬来解释的话因为要保留前后两段的区别这个信息,所以mod的是2n,而+n的解释就是前半段可以变换到后半段,而后半段可以余出mod之后就可以得到前半段的对应位置。知道这个之后我们只需要在标记的情况下进行操作1,如果是已经翻转了的话,我们给的两个位置a,b可以得到a映射后和b映射后的位置,而因为操作2是对称的,所以a,b映射后的位置就是可以映射到a和b的位置,这个时候只需要对这个两个映射后的位置进行交换就可以了。这个题最后需要注意的就是在最后输出的时候如果是已经翻转的状态的话需要先把后半段输出再输出前半段。
浙公网安备 33010602011771号