A. Two Rival Students
给出n,x,a,b四个数,其中a和b的移动范围是[ 1,n ],x是能够移动的步数。问 | a - b | 最大值是多少?
题解:
- 令a>b , 如果a<b,交换a和b
- 令k=n-a+b
- 如果x>=k,输出n-1;否则,输出x
B. Magic Stick
给出两个数x和y,问x是否可以通过多次进行以下两个步骤得到y:
- 如果x是偶数,可以执行
- 如果x>1,可以执行x-1
题解:
仔细分析前几个数,比如x=1,可以得到的值只有1;x=2,可以得到的值有1,2,3;x=3,可以得到的值有1,2,3;x=4,可以进行多次操作1,得到相当大的值,然后进行多次操作2,可以得到任何值;对于任何x>4的值都能得到4,然后进行4进行的操作。
C. Dominated Subarray
给出一组数,问这组数中两个相同的数的最近的距离。
题解:
定一个长度为2*10^5的数组,数组的下标是题目中给出的值,数组的值是该值得位置。初始数组值为-1,每次进行数组值得更新操作,对于值不是-1的数求两个数的最近距离。
D. Yet Another Monster Killing Problem
打怪游戏中,有n的怪物,每个怪物有自己的能力,而且必须按顺序消灭;有m个英雄,每个英雄有自己的战斗力和耐力值。你可以指挥英雄,每个英雄可以出现多次。问你最小可以派遣多少个英雄?
题解:
提前找出怪物的最大能力和英雄的最大战斗力,如果战斗力<怪物能力;输出-1。
定义一个英雄的结构体,对战斗力进行从小到大排序。另外定义两个数组a和b,其中a保存英雄的战斗力,b从大到小进行保存耐力值得最大值。对于怪物进行保存能力的最大值maxx和频率num,对于每个maxx用二分找出a中找出大于等于maxx的下标,判断该下标对于的b值与num的大小,如果大于num,令num=1,maxx=当前的怪物能力,ans++;最后输出ans+1即可。