一、经此一役小红所向无敌题目解析对于这道题光和对立现在要挑战大魔王小红小红的血量的10^999999999光的攻击是a、血量是h对立的攻击是b、血量是k每一回合光先对小红发起攻击然后独立再对小红发起攻击然后小红发动幻术让光和对立同时相互攻击当光和对立其中一个人死亡后另一个就会悲痛欲绝然后对小红发动大招伤害是自身攻击力*10然后自杀如果光和对立同时死亡都无法放出大招。最后我们要求出小红受到的伤害算法思路这道题通过观察数据范围我们可以发现光和对立是无法杀死小红的我们只需要求出小红受到的伤害然后输出即可。对于第一种解法就是模拟整个过程首先小红受到来自光的a点伤害然后再受到来自对立的b点伤害然后光和对立相互攻击光受到a点伤害对立受到b点伤害。直到光和对立有一人死亡生命值0如果两人同时死亡就不会放大招否则就判断是谁放大招小红受到攻击*10的伤害。但是模拟整个过程呢是会超时的如果光和对立的攻击都为1而生命值都为10^9那我们要循环10^9次。解法二直接计算每一回合小红受到的伤害是固定的ab光受到的伤害是固定的a对立受到的伤害也是固定的b那我们是不是只需要计算出一共需要多少个回合那是不是就可以直接计算出小红受到的伤害那如何计算一共需要多少个回合我们需要的回合数就是光和对立能坚持多少个回合那需要的回合数n min(h/b,k/a)光会受到n*a的伤害对立会受到n*b的伤害小红受到n*(ab)点伤害。但是我们知道/运算是可能存在余数的就是经过n个回合以后光和对立可能都还存活者但再过一个回合一定有一个人死亡我们就需要进行判断如果光和对立都存活就再执行一个回合光受到a点伤害对立受到b点伤害小红受到ab点伤害)。最后我们要进行判断是否需要放大招在上述过程中一定是有一个人死亡的也可能两个人同时死亡我们就需要判断此时是否还有人存活如果光存活小红受到b点伤害如果对立存活小红受到a点伤害。最后我们输出小红受到的总伤害即可。这里注意数据范围10^9还要进行、*运算所以使用long long来存储数据代码实现#includeiostreamusingnamespacestd;intmain(){longlonga,h,b,k;cinahbk;longlongnmin(h/b,k/a);hh-b*n;kk-a*n;if(h0k0){h-b;k-a;n;}longlongretn*(ab);if(h0)ret10*a;if(k0)ret10*b;coutretendl;return0;}二、连续子数组最大和题目解析这道题给一个长度为n的数组让我们求出非空连续子数组中所有数的和是最大值让后返回即可。算法思路这道题解法思路就是动态规划—线性dp这里我们先来分析一下我们要求出连续子数组中所有数的和的最大值我们要这个和尽可能大状态表示dp[i]表示以i位置为结尾的连续子数组的和的最大值那对于i位置如果前面[0,i-1]区间中以i-1位置为结尾的连续子数组的和最大值大于0那我们让这个值再加上i位置的值就等于以i位置为结尾的连续子数组的和的最大值否则以i位置为结尾的连续子数组的和的最大值就等于arr[i]。那我们区间[0,i-1]中以i-1位置为结尾的最大连续子数组的和如何去求呢这个值在我们的dp[i-1]中存着那状态转移方程dp[i] min(dp[i-1] , 0) arr[i]。这里注意我们dp[i]表示的是以i位置为结尾的连续子数组所有数和的最大值但是题目要求我们返回的是整个数组中连续子数组中所有数和的最大值所以我们要找出来整个dp表中的最大值。代码实现#includeiostream#includevectorusingnamespacestd;constintN200002;intdp[N1]{0};intmain(){intn;cinn;vectorintarr(n);for(inti1;in;i){cinarr[i];}intret-101;for(inti1;in;i){dp[i]max(dp[i-1],0)arr[i];if(dp[i]ret)retdp[i];}coutretendl;return0;}三、非对称之美题目解析这道题给我们一个字符串让我们找出这个字符串中最长的非回文字符串的长度。算法思路这道题我们如果按照找到字符串中最长的回文字符串的方法来解决那是不能很好的解决的时间复杂度是O(n^2)会超时那我们如何解决呢我们找不是回文字符串的子串不好找难不难试着去找一下是回文的子串或者判断一下整个字符串是不是应该回文字符串**如果整个字符串是一个回文字符串**那我们去掉一个字符后剩下的字符串一定不是回文字符串。那最长的不是回文的子串长度就为str.size() -1。**如果整个字符串不是回文字符串**那此时整个字符串的长度就是我们想要的结果。**但是这里要注意特殊情况**如果整个字符串中只有一个字符那我们去掉一个字符以后它也不是回文字符串。代码实现#includeiostreamusingnamespacestd;string str;intfunc(){intnstr.size();boolflagtrue;for(inti0;in;i){if(str[i]!str[0]){flagfalse;break;}}if(flag)return0;flagtrue;intl0,rn-1;while(lr){if(str[l]!str[r]){flagfalse;break;}l;r--;}if(flag)returnn-1;elsereturnn;}intmain(){cinstr;coutfunc()endl;return0;}