A:题意:你有一个1 * n的网格,有些地方是障碍。你有两个人,分别要从a到b和从c到d,一次只能向右跳1步或者两步。求是否可行。
解:先判断有没有2个连续的障碍,然后判断是否能错车。
B:题意:你有一个ABC字符串,你能进行的操作就是把某个ABC变成BCA。求最多进行多少次操作。
解:发现可以把BC看做一个整体。单独的B和C看做障碍物。
那么对于每一段无障碍物的连续A,BC,求逆序对就好了。
C:题意:你有n场考试,满分X分。你的对手每场考试得了bi分。你每学习一个小时就能把某场考试提高1分。你能给每场考试选择一个li~ri之间的加权。求你最少花多少小时才能不比对手考的低。
解:发现加权要么是li要么是ri。且你比对手高就是ri,否则就是li。
然后发现如果有两场考试都没有满分,最优策略是把一场考试的分挪到另一场上。
然后就发现答案一定是若干场满分和一场非满分。这时候就可以排序了,然后二分答案,枚举非满分是哪一场。
D:题意:给你平面上两组n个点,你要把它们配对,使得曼哈顿距离最大。n <= 1000。
解:曼哈顿距离有2个绝对值,拆开就是4种情况。直接建4个中转点表示这4种情况,跑最大费用最大流。