A. Three Friends
给三个数a,b,c,问这三个数分别进行+1,-1和不变,三种操作中的任何一种之后,得到的|a-b|+|a-c|+|b-c|的最小值是多少?
题解:
三重for循环,让他们分别进行-1,+0,+1操作,找出最小的|a-b|+|a-c|+|b-c|
B. Snow Walking Robot
一个机器人,能够上下左右的在二维坐标中行走,现在给出需要上下左右(UDLR)行走的标记符,你需要在删除一些或不删除标记符的情况下重新排列机器人走的顺序使得标记符数量最多并且机器人不会走到之前走过的坐标(初始坐标除外),输出最大的标记符数以及机器人走的顺序。
题解:
计算UDLR各自的数量,并且UD=min(U,D);LR=min(L,R);
- UD==0&&LR==0直接输出0
- UD==0输出2再输出LR
- LR==0输出2再输出UD
- UD!=0&&LR!=0,输出(UD+LR)*2,然后输出UD个U字符,LR个R字符,UD个D字符,LR个L字符
C. Yet Another Broken Keyboard
给一个长度为n的小写字符和26个英文字符的一部分,对于n个字符中连续的满足给出字符的长度m,让你求各个m的m*(m+1)/2的和。
题解:
用flag标记给出的英文字符,然后分别求连续的字符长度,对于flag[str[i]-'a']==0时,计算ans=ans+m*(m+1)/2,m=0;for循环结束之后再计算ans=ans+m*(m+1)/2,m=0。最后输出ans
D. Remove One Element
给出一个长度为n的数字序列,你可以删除其中的一个字符或不删除任何字符情况下,让你求最大的严格递增的序列长度。
题解:
- 在不删除任何字符的情况下,求最长的严格递增的序列长度ans
- 判断可能需要删除的字符,判断条件为:!(key[i-1]<key[i]&&key[i]<key[i+1])&&key[i-1]<key[i+1],满足条件则应该删除这个key[i],ans=max(ans,计算key[i]之前严格递减的连续序列的长度+key[i]之后严格递增的连续序列的长度)
- 输出ans即可