暑假嗨四训练总结

一、题意

A.有三个队列,要求使a队列存的数为排列的前缀,c队列存的数为排列的后缀,b队列存的数为其他。现在你可以从任意队列中选一个数放到其他队列。问你需要最小移动多少次,满足三个队列的性质。

B.给n组样例,每组样例包含了一组数据,要求找出这组数据之中相同的两个数字之间最短的距离。

C.有n个学生,有两个学生a,b经常打架所以他们两个越远越好,x为a和b换位置的次数,求两个人最大距离。

D.有n个怪兽 ,每个怪兽都有能力值a[i]。然后现在你有m个英雄,每个英雄也有能力值p[i],每个英雄还有一个s[i],表示这个英雄一天最多能消灭多少个怪兽,现在你必须一个接一个的消灭怪兽,不能改变顺序,然后问你最少多少天,能够消灭所有的怪兽。

E.给一个数组a,要求找到一个数组b,使得b中每个数都符合bi=ai⊕x,而且b中所有数的二进制表示中的1的数量是一样。

F.给n组样例,每组样例是一个长度为n的排列,然后我们每次可以选择一个位置i和i+1的数字进行交换,但是每个位置只能交换一次,交换结束后,求这个排列最小是多少。

二、非水题AC过程

B.利用两个数组进行解题,a数组用来表示出现的数字,b数组用来表示数字出现的位置,len初始为200005,同时用它表示数字出现两次的时候间隔的距离,min函数每次取最小值,注意当a数组只有一个的情况,因为这道题需要多次循环,因此不能使用遍历两次的方法,遍历两次基本上都会超时。

C.通常解决方法是把a往左移动,把b往右移动,不过要注意的是b或a如果到了一端,就不能移动了,当然移动次数比较多了,距离最大也就是n-1,而最后的结果便是b的位置减去a的位置。

F:建立三个数组,a数组用来输入开始的排列,b数组用来对a数组进行编号,c数组用来判断数字与数字之间是否交换过,然后就是对a数组中的数据从左到右遍历,对每两个数字之间进行判断、交换,最后得出最小的排列。

三、补题过程

A.认真重看了一遍题,在博客上查找标准代码,理解了AC代码的书写含义。

D.课下补题时思路也感觉是贪心没错,但这道题因为贪心要考虑耐力和能力两个方面,所以写代码选择“英雄"的时候就犯了一些错误,有一些考虑不到,最后参考了一下通过的人的代码。

E.比赛时没看懂这道题到底要干嘛,课下的时候看懂了,但并不知道如何去实现,看大佬的代码时有点茫然,感觉一片灰暗。

四、感想

根据今天过了的题来说,对关于和位置有关的或通过位置的顺序类型的一般难度的题目有了一点头绪,但对于一些代码看不很懂的题目还是很灰暗,很多时候会出来一些思路,但就完全不知道怎么实现,幸好一些博客上有思路的一些解析,不然还是有点有心无力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值