摘要:
题意: 给出一个矩阵,有两种操作: 1.翻转给定的子矩阵; 2.查询a[i][j]的值。 思路: 树状数组是从小到大更新的。 这个题用二维树状数组可以解决,假设是一维树状数组, 0 0 0 0 0 0 我们把第三个到第四个翻转,变成 0 0 1 1 -1 0 sum[1] = 0,sum[2] = 阅读全文
摘要:
题意: 对一个矩阵有2种操作: 1.把某个元素设为x。 2.查询以(x1,y1)为左上角 以(x2,y2)为右上角的矩阵中的数字的和。 思路: 二维树状数组入门题,同时对横坐标和纵坐标做前缀和就行了。 代码: 阅读全文
摘要:
题意: 给出一个矩阵,其中某些格子有树,用给定的一个规模的方框去圈,问最多可以圈到多少树。 思路: 二维树状数组裸题。 代码: 阅读全文
摘要:
题意: 输入若干个区间,对于一个区间(a,b),如果存在一个区间(x,y)满足x <= a && y >= b && y - x > b - a,那么就说(x,y)比(a,b)大。 求比每一个区间大的区间有多少。 思路: 树状数组,这题最关键的其实是有重复的区间。 首先把区间按照起点升序排序,如果起 阅读全文
摘要:
题意: 把一个数组分成若干组,保证每组的size >= k并且一组中任意两个数字的差的绝对值 <= d,问存不存在这样的分法。 思路: 线性dp。 用dp[i]表示前i个数是否有分法。 设j为满足a[i] - a[j] <= d的最小的a[j]的下标,那么dp[i]就可以从dp[j-1] ~ dp[ 阅读全文
摘要:
题意: 有n * k块木板,每个木桶由k木板组成,每个木桶的容量定义为它最短的那块木板的长度。 任意两个木桶的容量v1,v2,满足|v1-v2| <= d。 问n个木桶容量的最大的和为多少,或者说明不可能做出这样的n个木桶。 思路: 贪心 要满足|v1-v2| <= d,那么就要满足最大的木桶容量和 阅读全文
摘要:
题意: 有n个开关,m盏灯。 一个开关可以控制多个灯,一旦一个灯开了之后,之后再对这个灯的操作就没用了。 问是否存在一个开关,去掉了这个开关之后,按下其它开关之后所有的灯还是亮的。 思路: 首先统计每个灯被按了几次,然后枚举每个开关,把这个开关的贡献去掉,判断是否所有灯的次数大于等于1,然后再回复这 阅读全文
摘要:
题意: 移动最少的步数,使得所有的棋子在同一颜色的格子中。 每次一个棋子只能向左或者向右移动一步,不能移到有棋子的格子中。 思路: 枚举全黑和全白的情况。 对于每一个需要移动的棋子,它移动到的位置一定是从1开始第一个可以移动的位置,不交叉移动,保证了步数最小。 代码: 阅读全文