dhuacm 周赛 02

A. Chess Placing
题意:给了一维的一个棋盘,共有n(n必为偶数)个格子。棋盘上是黑白相间的。现在棋盘上有n/2个棋子,让你全部移动到黑色格子或者白色格子,要求步数最少,并输出步数。
题解:由于黑色或者白色都是固定位置,对棋子位置从小到大排序,计算移动到黑色和白色两种情况的步数,取最小值就好了。

B. Switches and Lamps
题意:有n个开关和m盏灯,对于一盏灯,只要存在一个控制这个灯的开关是开着的,这个灯就会被点亮。然后给你n×m的01矩阵,如果i行j列为1代表开关i可以控制灯j,问你能否删掉一个开关,使得所有的灯仍旧能被点亮。
题解:求出每一列中1的个数,遍历每一行,如果如果去掉某一行后这一列的和会变成0,说明会有灯不受控制,这一行就不能删掉。

C.Liebig’s Barrels
题意:需要造n个桶,每个桶需要k个木板,任意两个桶之间容积(一个桶中最短的木板的高度)的差距不能超过l,然后给你n * k个木板,第i个木板的长度为ai,问能否造出符合条件的n个桶,如果能的话问这n个桶的容积之和最大是多少,如果不能的话就输出0。
题解:给所有板从小到大排个序,然后看最短板往上n块板是不是都小于等于其长度+l,如果不满足则做不出这样的桶组合。
现在我们取n块板来造这n个木桶,作为每个桶的最短板。先算其长度+l的木板所在的位置t,然后从第一块最短板开始,每隔k个取一块板,直到板位置超过了t。然后从t位置往前取,除了前面取过的位置,一个一个地取板。按照上述操作取板,直到取了n块板作为木桶的最短板。这时候盛水量就为这n块板长度和。

D. Sand Fortress
题意:你有n堆沙子,最左边的沙子的最大高度不能超过H,让你在一个从1到正无穷的一维平面内放沙子,且要满足相邻两个坐标的沙子的高度不能超过1。问沙子能够占用的最少坐标点的个数。
题解:

  1. 注意一个隐含条件:最后一堆沙子高度不能超过1
  2. 想象可能的几种符合要求的情况:
    第一种:K(K<=h),K-1,K-2,…,2,1 = n ;(5 4 3 2 1)
    第二种:K(K>h),K+1,…,K+x-1,K+x,K+x-1,…,K,K-1,…,2,1 = n;(3 4 5 4 3 2 1)
    第三种:K(K>h),K+1,…,K+x-1,K+x,K+x,K+x-1,…,K,K-1,…,2,1 = n;(3 4 5 5 4 3 2 1)
    (规定堆数然后两边凑过去肯定不会都是正好凑一个山顶吧,具体情况拿笔画一画就可以了)
  3. 要找最小的堆数:考虑二分。二分当前堆数,不断缩小范围,判断当前x堆时可以堆放的沙袋数得到最终结果。
  4. 注意范围;以上计算使用最基本等差数列公式。

E. Pencils and Boxes
题意:给你n只笔,每支笔有个属性ai,现在要将笔放入到盒子里,被放过笔的盒子中的笔的数量必须大于k,每个盒子中对于任意i与j都要满足|ai-aj|<=d。求是否有满足以上条件的放置方法。
题解:这道题实际意思:给你n个数字,让你把他们随意分配到任意数量的集合里,要求集合内数字的个数不小于k,并且任意两个数字之差不大于d。问是否能找到这样的一种集合构造。
1.首先把数字排序,那么这些集合肯定是这串数字的一个一个的不交叉的连续区间(如果满足条件)
2.进行尺取即可:我们知道如果一个点可以作为终点,那么它的下一个点一定有资格作为起点;哪些点可以作终点?满足题目中k,d要求的点。所以先找到可以开始的起点,向后找终点,并对该点和下一个点(满足起点条件)做标记。最后判断最后一个点能不能成为终点即可(即能否被打上标记)

F.Isomorphic Strings
题意:给定一个长度为n(n<=2e5)的字符串S(仅含有小写字母),有m(m<=2e5)次查询。每次查询给三个数,x,y,len,求在S[x]S[x+len-1]和S[y]S[y+len-1]是否存在相应位置唯一对应关系。(例如aba和brb,aaa和kkk,abs和ert是唯一对应。aab和abc,test和best则不是唯一对应)
题解:对于ch=‘a’~‘z’,将字符串变为01串,某位为ch时为1,否则为0. 分别对26个字符串哈希。查询的时候,只要找到两段区间位置上对应的字符,看它们在这两段哈希值是否相等。

G. Team Players
题意:给出数字0~(n-1),并给出m个数字对,要求你找出所有的三元组(a,b,c),a<b<c,并且其中不能包含这些数字对。然后让你输出所有三元组Aa+Bb+C*c的和。
题解:我们用容斥定理,把所有三元组和求出来,减去包含至少包含其中一个数字对的三元组的和,加上至少包含其中两个数字对的三元组的和,减掉包含其中三个数字对的三元组的和。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值