摘要:
Problem - E - Codeforces 解题思路: 首先这道题不能用贪心,然后是每个数不能超过三次,一个骨牌的两面数字不能相同,满足这些条件后,如果把骨牌的数字按边连接起来,就会发现会形成环,因为形成的边度数都是2,形成环之后,选骨牌的行为就变成了选不相邻的边,若是奇数,则选的边必有相邻的 阅读全文
摘要:
Problem - D - Codeforces 解题思路 要找到长度不小于k的子序列中最大的中位数,可以用二分答案的方法,可是要怎么个二分法呢,二分中位数吗,可是中位数怎么二分,设二分的数是x,难道是确定是否有子序列的中位数为x吗,如果是这样的话就不知道该怎么二分了,而且为了确定是不是中位数复杂度 阅读全文
摘要:
Problem - A - Codeforces 解题思路 两点的曼哈顿距离可以把所有横纵坐标拆开分成两组,那么就将问题转换成了求数组中所有数对差值的总和,然后对两组从小到大排序 如图,红色的部分就是多出来的数和前面的数的差值,这个值就是最大的数×总个数-所有数的和,如此类推,就可以以O(n)的复杂 阅读全文
摘要:
加法 #define mod 1000000007 int a,b; a=(a+b)%mod; int 减法 #define mod 1000000007 int a,b; a=(a-b+mod)%mod; int 乘法 #define mod 1000000007 int a,b; a=(a*b) 阅读全文
摘要:
Problem - E - Codeforces 解题思路: 这题需要用状压dp,因为一个数可以表示成二进制的形式,二进制的每一位可以表示存在和不存在两种状态,通过用一个数表示就可以用位运算进行操作,这样可以省下大量的代码量,不然需要初始化\(dp[N][2][2][2][2][2][2][2]\) 阅读全文
摘要:
Problem - C - Codeforces 解题思路 先让\(a_{i}-i\),这样的话,就可以将问题转换成求最少操作数得到单调不减数列 用\(dp[i][j]\)表示前i个数变成小于等于j最少需要多少步,所以接下来考虑\(dp[i+1][j]\)怎么来,和\(dp[i][j]\)相比,他多 阅读全文