problem1 link

设行数为$n$列数为$m$

对于任意的两行$r_{1},r_{2}$以及任意的两列$c_{1},c_{2}$所确定的四个格子,只要知道其中的三个就能确定第四个,且必须要三个。

这样的话,可以看作$n+m$个节点,如果$(i,j)$为‘Y’那么将第$i$行表示的节点和第$j$列表示的节点连一条边。这样的话,每个联通块都代表了一个子矩阵。

假设有$k$个联通块,那么答案为$k-1$。

因为需要将$k$个联通块连接起来。

problem2 link

首先,如果$A \le \frac{B}{2}$,那么令$A=\frac{B}{2}+1$。因为$[A,\frac{B}{2}]$内的数字的2倍一定在$[\frac{B}{2}+1,B]$中。 $C$作类似处理。

现在$[C,D]$中的数字一定需要全部保留下来。$[A,B]$中那些有倍数在$[C,D]$中可以不要。

(1)如果$B \le 10^{5}$,那么只需要挨个枚举$[A,B]$中的每个数字即可。

(2)如果$B > 10^{5}$,枚举因子$k,k>1$,那么$[\left \lceil \frac{C}{k} \right \rceil,\left \lfloor \frac{D}{k} \right \rfloor]$与$[A,B]$的交集内的数字都可以不要。

由于$D \le 10^{10},A > 5*10^{4}$,所以$k$最大枚举到$2*10^{5}$即可。

problem3 link

首先,可以计算出以下两种情况:

(1)和是0。那么只需要枚举将第$i$个数字变成0,然后剩余数字的和是0即可;

(2)最多有一个数字的绝对值不是1,剩余都是。那么可以枚举这个数字,然后剩下的数字应该正好有一半的-1一半的1,且-1的个数是偶数。

那么现在只需要处理和不是0且至少有两个数字的绝对值大于1的情况。

可以发现,这种情况,最后的和(也就是乘积)的绝对值不会大于100.

比如等于102,那么可能是$2*51*1^{t}$,由于最多50个数字,那么 $t$最大为48,此时2+51+1*48=101<102。可以发现,越比100大,越不可能得到。

因此,可以进行动态规划。设f[i][j][k]表示考虑了前$i$个数字,和是$j$乘积是$k$的最小代价。

这里有一个优化,就是对于一个状态$(i,j,k)$,还剩下$[i+1,n]$个数字未考虑,即$t=n-(i+1)+1=n-i$个数字。那么当$|k|-|j|>t$时,后面$t$个数字无论是什么组合都不会使得最后的和与乘积相等。(由于python跑的太慢,加上这个优化后才能跑过)

code for problem1

class RectangleArea:

    f = []

    def getRoot(self, x):
if self.f[x] != x:
self.f[x] = self.getRoot(self.f[x])
return self.f[x] def minimumQueries(self, known):
n = len(known)
m = len(known[0])
for i in range(0, n + m):
self.f.append(i)
for i in range(0, n):
for j in range(0, m):
if known[i][j] == 'Y':
ri = self.getRoot(i)
rj = self.getRoot(n + j)
self.f[ri] = rj
ans = -1
for i in range(0, n + m):
if self.getRoot(i) == i:
ans += 1
return ans

  

code for problem2

class SetMultiples:
def smallestSubset(self, A, B, C, D):
if A <= B / 2:
A = B / 2 + 1
if C <= D / 2:
C = D / 2 + 1
ans = D - C + 1 + B - A + 1
if B <= 100000:
for x in range(A, B + 1):
t = (C + x - 1) / x
if t * x <= D:
ans -= 1
else:
for x in range(200000, 1, -1):
left = (C + x - 1) / x
right = D / x
if left < A:
left = A
if right > B:
right = B;
if left <= right:
ans -= right - left + 1
A = right + 1 return ans

  

code for problem3

class PerfectSequences2:

    def calculate1(self, seq):
n = len(seq)
result = 1 << 40 for i in range(n):
sum = 0
for j in range(n):
if i != j:
sum += seq[j]
result = min(result, abs(sum) + abs(seq[i]))
return result def calculate2(self, seq):
n = len(seq)
result = 1 << 40
if n % 4 != 1:
return result for i in range(n):
f = []
for j in range(n):
if i != j:
f.append(seq[j])
f.sort()
tmp = 0
for j in range(n/2):
tmp += abs(f[j] - (-1))
tmp += abs(f[n - 2 - j] - 1)
result = min(result, tmp)
return result def minimumMoves(self, seq):
n = len(seq)
if n == 1:
return 0
result = min(self.calculate1(seq), self.calculate2(seq)) N = 201
M = 100
inf = 1 << 40 f = [0] * (n + 1) for i in range(n + 1):
f[i] = [0] * N
for j in range(N):
f[i][j] = [inf] * N f[0][M][M + 1] = 0
for i in range(n):
val = seq[i]
for x in range(N):
for y in range(N):
t = f[i][x][y]
if t == inf:
continue
xx = x - M
yy = y - M if abs(yy) - abs(xx) > n - i:
continue
limit = M / abs(yy)
if abs(yy) > 1:
limit = min(limit, (n - i - 1 + abs(xx)) / (abs(yy) - 1))
for j in range(1, limit + 1):
if abs(xx + j) <= M:
rx = xx + j + M
ry = yy * j + M
f[i + 1][rx][ry] = min(f[i + 1][rx][ry], abs(val - j) + t)
if abs(xx - j) <= M:
rx = xx + (-j) + M
ry = yy * (-j) + M
f[i + 1][rx][ry] = min(f[i + 1][rx][ry], abs(val - (-j)) + t)
for i in range(N):
result = min(result, f[n][i][i])
return result

  

topcoder srm 505 div1的更多相关文章

  1. Topcoder SRM 643 Div1 250<peter_pan>

    Topcoder SRM 643 Div1 250 Problem 给一个整数N,再给一个vector<long long>v; N可以表示成若干个素数的乘积,N=p0*p1*p2*... ...

  2. Topcoder Srm 726 Div1 Hard

    Topcoder Srm 726 Div1 Hard 解题思路: 问题可以看做一个二分图,左边一个点向右边一段区间连边,匹配了左边一个点就能获得对应的权值,最大化所得到的权值的和. 然后可以证明一个结 ...

  3. topcoder srm 691 div1 -3

    1.给定一个$n$个顶点$n$个边的图,边是$(i,a_{i})$,顶点编号$[0,n-1]$.增加一个顶点$n$,现在选出一个顶点集$M$,对于任意的在$M$中 的顶点$x$,去掉边$(x,a_{x ...

  4. topcoder srm 714 div1

    problem1 link 倒着想.每次添加一个右括号再添加一个左括号,直到还原.那么每次的右括号的选择范围为当前左括号后面的右括号减去后面已经使用的右括号. problem2 link 令$h(x) ...

  5. topcoder srm 738 div1 FindThePerfectTriangle(枚举)

    Problem Statement      You are given the ints perimeter and area. Your task is to find a triangle wi ...

  6. Topcoder SRM 602 div1题解

    打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...

  7. Topcoder SRM 627 div1 HappyLettersDiv1 : 字符串

    Problem Statement      The Happy Letter game is played as follows: At the beginning, several players ...

  8. Topcoder SRM 584 DIV1 600

    思路太繁琐了 ,实在不想解释了 代码: #include<iostream> #include<cstdio> #include<string> #include& ...

  9. TopCoder SRM 605 DIV1

    604的题解还没有写出来呢.先上605的. 代码去practice房间找. 说思路. A: 贪心,对于每个类型的正值求和,如果没有正值就取最大值,按着求出的值排序,枚举选多少个类型. B: 很明显是d ...

随机推荐

  1. vue中解决跨域问题

    方法1.后台更改header header('Access-Control-Allow-Origin:*');//允许所有来源访问 header('Access-Control-Allow-Metho ...

  2. C++时间类型详解( time_t 和 tm )

    原文:http://blog.csdn.net/love_gaohz/article/details/6637625 Unix时间戳(Unix timestamp),或称Unix时间(Unix tim ...

  3. es6generator

    yield语句 由于Generator函数返回的遍历器对象,只有调用next方法才会遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数.yield语句就是暂停标志. yield语句只能用在 Ge ...

  4. PDO数据访问抽象层(下)

    PDO两大功能 一.事务功能 PDO的事务功能主要控制好几条sql语句同时成功或者同时失败(当其中一条SQL语句有错误时,同时好几条一起失败),失败时可以回滚操作 1.造对象 <?php $ds ...

  5. 在caffe-ssd安装编译环境运行make all时候报错:Makefile:572: recipe for target '.build_release/src/caffe/util/hdf5.o' failed make: *** [.build_release/src/caffe/util/hdf5.o] Error 1

    解决办法: 修改:Makefile.config INCLUDE_DIRS /usr/include/hdf5/serial/ 修改:Makefile LIBRARIES hdf5_hl and hd ...

  6. <5>Cocos Creator 脚本简介

    1.创建脚本 在资源管理器窗口中点击鼠标右键,显示菜单中点击新建,选择新建的脚本类型,这里举例就选择菜单中的JavaScript,或者如下图点击创建按钮也可. 新建后就会在资源管理器中出现一个NewS ...

  7. TCP连接图示

    转移2018.4.6 自己总结绘图

  8. 原生JS实现addClass,removeClass,toggleClass

    jQuery操作class的方式非常强大,但是目前还有一些人不知道如何使用或者由于项目统一性的原因无法使用jquery. 在此写了一个利用原生js来实现对dom元素class的操作方法 1.addCl ...

  9. Python全栈-day12-day13-函数4

    1.迭代器 1)定义:迭代取值的工具 2)优缺点 优点 a.提供一种不依赖索引取值的方法 b.同时一时刻内存在存在的值只有一个,更加省内存 缺点 a.取值麻烦,只能通过next方法一个一个地往后取 b ...

  10. CS131&Cousera图像处理学习笔记 - L5边缘

    cs131: http://vision.stanford.edu/teaching/cs131_fall1617/ coursera: https://www.coursera.org/learn/ ...