T1.铺地毯(carpet)

  给出n个矩形的左下角坐标和x,y方向的长度,后输入的在上层,求对于点x0,y0,最上面一层地毯的编号(无则-1)。

  一开始题目看错,以为是两组坐标。。。然而居然只WA了一个点???运气好运气好。。。看题还是要仔细。。做法么,模拟一遍就好了,大水题。

 

T2.选择客栈(hotel)

  给出n家客栈,总颜色数k,最大可承受消费p。对于每家客栈,有一个咖啡厅,以及一个颜色col[i],咖啡厅的最低消费pp[i]。求选择两家客栈l,r使得区间[l,r]内存在pp[i]<=p的店,而且col[l]==col[r]的方案数。

  一开始想到的是枚举中间咖啡店,然后计算两边各种颜色店的乘积。。。然后仔细一想,由于[l,r]内满足条件的可能有多家店,所以会重复计算,就放弃了。

  然后想到另一个算法。对于每个i,记录它后面每种颜色的店有几家,然后离它最近的满足pp[i]<=p的店的编号,这样的话只要每次加上一个r[closest[i]][col[i]]就好了。然后考虑一下closest[i]是不是也满足条件,不要漏算。然后这样AC了,但是空间复杂度很高,时间也有点慢,毕竟多了好多线性处理。

  然后看了hc算法之后顿悟。本来就是一个求和问题,为什么不直接求前缀和呢??于是只要开两个数组,记录一下当前的sum[col[i]],以及最近的满足条件的las[col[i]]就行了。然后只要更新的时候,考虑是否多算了当前店铺即可。这样空间小很多,运行起来也快了一些。

 

T3.mayan游戏(mayan)

  很早就看到过这个题,然后一直没敢写【想想就烦】。大概意思是,给出一个5*7的方格,每个方格可以有不同颜色的方块。你每次可以移动其中一个【左右移动】,然后因为重力一些方块会往下掉。这时如果有横向纵向连成三个及以上的都会消掉,而且是同时。然后消完有可能有方块往下掉,有可能消除……直到不能消,一次操作就完成了。(图例)

   

  现在要求n步以内能否有清空的方案。有则按x,y,(±1)的关键字顺序输出最小的一种,没有则输出-1。

  其实就是直接dfs爆搜,按照关键字顺序搜到的第一个解输出就好了。

  主要是转移状态的时候烦,容易写错。然后还要稍微优化一下,不然会超时。

  转移的时候,可以写一个函数转移,每次返回是否进行了消除,来判断是否继续重复操作。。然后往下掉的时候千万要仔细,我自己调的时候写错三四次orz。。

  然后优化的话,显然1方法更优,所以可以去掉-1操作,然后对左边28个每个都循环。但是需要注意的是(上下两个相同当然不换,这个废话不说),如果当前块是空,而换过来的那块是有色的,就要预先判断换成-1操作,否则就是WAWAWAWA(好像是四个点来着)。

  调不出来的话对着数据使劲找就能A了

posted on 2017-05-23 14:20  啊?  阅读(227)  评论(0编辑  收藏  举报