BUPT 2017 summer training (for 16) #1

惨案现场移步https://vjudge.net/contest/171342#overview

这一场签到题为主..6题算是踏入acm门槛吧

A(Gym100971A)

题意:给出一个地图,'#'代表水,'.'代表陆地,'?'代表未定。要求地图中只有一块陆地(连通块),试确定是否有一种方案,多种方案,亦或无解

考试的时候脑抽,其实并不难

从确定的陆地出发,找出所有已知连通块,与陆地相连的?改为.,BFS结束后如果仍为陆地,说明其必须为海洋

若已经有2个以上连通块则无解,接下来即是确定是否有多解,可以把所有问号位置保存下来,并且依次更改(每次只更改一个问号的状态)

因为如果一个?更改后仍只有一个连通块,则说明有多解;否则即使再更改其他的问号,连通块也不会减少了,因为我们在BFS时的染色策略已经是最优的了

http://paste.ubuntu.com/25239496/

B(Gym100971G)

题意:三个矩形a*b, a1*b1,a2*b2,问能否从a*b中剪下另外两个矩形

注意三个矩形旋转的情况即可,编写合适函数可以减少代码量

http://paste.ubuntu.com/25111085/

C(Gym100947G)

题意:按照方形螺旋顺序在存储器中搜索,已知搜索位置坐标,求到达的步数

对一个点取n=max(|x|, |y|),可以得出这个点位于第n圈,稍加观察就会发现,走到第n圈最后一个点需要(2n-1)²步

再确定最后一圈时的四个拐角点就能得出答案

同样的..这道题虽然容易想,写出简短的代码也是需要思考的

http://paste.ubuntu.com/25111145/

D(Gym100947I)

题意:已知n个数{ai},n<=10^4, ai<=10^6,求满足整除关系的二元组(ai,aj)(其中ai | aj,若ai=aj则不计(aj,ai))个数

注意到ai的大小范围,可以将n个数从小到大排序,对每个数枚举约数更新答案,再更新当前ai作为约数出现的数量

时间复杂度O(n*sqrt(max{ai}))

http://paste.ubuntu.com/25111181/

E(CF730H)

题意:给定n个字符串,其中m个想要删除,求一个模板串,使其可以与所有将要删除的串匹配,且与所有保留的串不匹配,可以使用?作为通配符

按要求构造即可,不要忘记将得到的答案与保留的串比对

http://paste.ubuntu.com/25111321/

F(CF730G)

题意:

n个修车请求,每个请求有一个理想开始时间s和持续时间d,对于一个请求,如果[s,s+d)这一段时间是空闲的那就安排进去,否则就找一个开始时间最小的长为d的时间段进行安排,求每个安排的开始时间和结束时间

用set<LL,LL>保存完整的时间段,初始为[1,INF),然后对于每个请求先查找最佳开始时间,如果能够成功将请求插入一段包含了[s,s+d)的时间,就把这段时间分成两份(边界情况可能仍为一份);否则查找能够插入这个任务的时间段

http://paste.ubuntu.com/25239584/

G(CF717C)

题意:n个数,对应了一个同学的懒惰程度和一个任务的难易度,一个任务耗时为其难易度和负责人的懒惰程度乘积,求最小总耗时

排序不等式,顺序和>乱序和>逆序和

http://paste.ubuntu.com/25111333/

H(CF717E)

题意:

给出一棵树,20W个点,每个结点有都有两种颜色之一,从结点1开始,沿树边行走,每到达一个结点都会改变其颜色,输出一条路径,使得沿该路径行走完后,所有结点都变为黑色

考试的时候没时间敲了。。不难想的题

仍然可以按照常规DFS的顺序走一遍,在搜索完一个结点的所有子结点后,这个结点的颜色是确定的

如果是黑色那就可以原路返回,否则可以走到它的父结点,再走到它,再返回它的父结点,这样它和它的父结点颜色都会变化一次,这个结点就是黑色了

注意根结点没有父结点,所以如果只剩下根结点不是黑色,可以走到其一个儿子,再走回根结点,最后回到那个被改变的儿子

http://paste.ubuntu.com/25239538/

I(CF598B)

题意:一个字符串s,有m次操作,将区间[l,r]中的最后一个字符移到区间首位,共重复k次,求最后字符串

模拟..

http://paste.ubuntu.com/25111336/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值