[NWPU][2018暑假作业][通用版]三、搜索和二分 [Cloned]

A - 贪心

定义一个结构体,保存牛的序号、用的位置、开始和结束的时间。然后根据开始时间从小到大排序,相等的话用结束时间从小到大排序。然后定义一个优先队列,排序方法相同,每次出来结束时间最小的,结束时间相同就出来开始时间最小的,第一个牛用第一个位置并进队列。然后比较队头的结束时间和下一个的开始时间,如果小于,就共用一个位置,队头出队列,下一个进队列,否则下一个牛用下一个位置,也进队列。

PS:请使用scanf/printf。不要问我为什么……

 

B - 优先队列

定义一个优先队列,队头为输出时间最小的,时间相同就是序号最小的。每次输出队头,然后队头元素的时间增加他自己的时间间隔后再入队。

 

C - map

跟第二版的B题差不多。

 

D - 贪心

优先队列,先输入一个作为基础,然后输入第二个,两两相加,取最小的n个进入队列,并把队列里的数字清空并按升序赋值给基础数组,然后依次输入剩下的,每次和基础数组两两相加,取最小的n个,继续上述操作。

 

F - 二分

和上一题差不多。需要注意的是如果需要pie的人比pie的数量少,那么只取最大的人数个pie就可以了。还有一点是对pie的体积二分而不是对半径。(发现交上去TE的题把输入输出全改成C的输入输出就OK了)

 

G - 二分

把所有天数n分割成大小不一定相等的m个区域,区域内的天数连续,求出分成m个区域后对于区域所花钱的最大值最小的情况。如果m=1,那么最大值就是输入的每天的最大值,如果m=n,最大值就是输入的所有天花钱的和。对这两个区间二分,计算一共分成多少个区域,如果区域数恰好等于m,就输出这时的最大值。

 

H - 二分

输入之后先排序,然后让最后一个输入值后面的值等于L,表示石头全部去掉的情况。然后在(0, L]二分查找最小跳跃距离,如果两个没有去掉的石头间距小于mid,去掉的石头数增加。后面的和上一题差不多。

然后还有一个关于二分查找的边界问题……写了这些一直有些迷茫,专门百度了一下。https://blog.csdn.net/u011523762/article/details/50878613

终于结束了……二分真的难诶……边界太难判断了……

前面好像有一道题……sample input #1这种根本不是输入输出……

 

I - 素数环 搜索

就是一个深搜题……先让第一位等于1,然后判断2~n-1位,最后判断n位,注意判断n位的时候要考虑和n-1位的和以及和1位的和都是素数。如果第n位没有问题就从头开始输出,注意最后一个数字后面没有空格。

 

J - 搜索

就暴力搜索,每种情况都列举一次。容易卡的地方感觉还在题意的理解上……输入每两行是一个测例,第一行是不同种邮票种类的价值,第二行是顾客需要的邮票价值总数。对各种邮票组合,让最终价值等于顾客需要的,可以重复。可能有很多种情况,输出按优先级:种类多、张数少、最大一张价值大、tie。也可能不存在这样的组合,就按题意输出none。

 

K - 搜索

直接搜索就可以啦,周围一圈依次搜索。可以根据一个X上下左右X的数量判断它为周长贡献了多少,每次相加,搜索完之后输出即可,注意不要重复搜索同一个格子。

 

L - 搜索

和上一题一样。

 

M - 搜索

就是一个很常规的搜索题,但是要注意当某种情况扔的次数(不一定扔完)已经大于最小次数的时候就结束这个情况,继续dfs;还有最小次数初始化的值不要太大,11就刚好……可能是写的算法复杂了点我自己如果初始化是20都会TE。。另外四个方向可以存到一个二维数组里面,每次选择一个方向,这样代码看上去会简洁一点。。然后这个题的长宽和前面两个刚好是反的,输入的时候反一下就行了。

 

N - 搜索

这次是广搜啦。

 

O - 搜索

深搜。走日字,然后因为是按照字典序输出,所以移动的先后方向一定不能错。从A1开始走,如果走完之后(step==m*n)最终回到A1就说明这个路线可行,输出这个路线即可。如果搜索完之后发现没有这样的路线就输出impossible。

 

P - 上一个题的加强版

这次是广搜啦。输入字符串的时候不要刚好定义输入的字符串的大小,多定义几个。。不然会RE。

 

Q - 搜索

感动,终于看到一个中文题了。。

dfs递归。

 

R - 搜索

还是广搜。。和前面的很多题都差不多。

 

S - 搜索

广搜,用一个指针指向前一个结点,输出的时候利用栈倒序输出。感觉广搜的题目方法都差不多。

 

T - 搜索

和P题一样。。数据改大就行了。

 

U - 搜索

深搜广搜都ok,我用的是广搜,会比深搜时间长一点。。每到达一个没有去过的黑砖数量就+1.

 

V - 搜索

深搜,类似八皇后,但是是一个一个点搜索的,搜索出一个可以放的点总数就加一,找出总数的最大值,输出。

 

X - 搜索

相当于是一个无向图,一共n个点,m条边,选定一个顶点,任意删去1条边,计算含这个顶点的连通分量的总权值,然后计算两个连通分量的差值,找最小差值。另外就是记得定义权值相关的时候要用64位整型,不然会WA。

 

Y - 搜索

深搜,对每条边列举可能的情况。如果所有棍子的总长不是4的倍数或者最长的棍子长于总长/4,则直接输出no.

 

猜你喜欢

转载自blog.csdn.net/qq_40560275/article/details/81167683