当前位置: 首页 > news >正文

乌鲁木齐住房和建设厅网站免费网站推广优化

乌鲁木齐住房和建设厅网站,免费网站推广优化,wordpress默认index,北京公司网站建设费用文章目录 题目求和棋盘挖矿 前缀和有利于快速求解 区间的和、异或值 、乘积等情况差分是前缀和的反操作 前缀和 一维前缀和: # 原始的数组num,下标从1到n n len(num) pre [0]*(n1) for i in range(n):pre[i1] pre[i] num[i] # 如果需要求解num[l] 到num[r] 的区…

文章目录

  • 题目
    • 求和
    • 棋盘
    • 挖矿

  • 前缀和有利于快速求解 区间的和、异或值 、乘积等情况
  • 差分是前缀和的反操作

前缀和

  • 一维前缀和:
# 原始的数组num,下标从1到n
n = len(num)
pre = [0]*(n+1)
for i in range(n):pre[i+1] = pre[i] + num[i]
# 如果需要求解num[l] 到num[r] 的区间和
ans = pre[r] - pre[l-1]
  • 二维前缀和
# 原本的数组是n*m形状的pre = [[0]*(m+1) for _ in range(n+1)]for i in range(n):for j in range(m):pre[i+1][j+1] = pre[i][j+1] + pre[i+1][j] - pre[i][j] + num[i][j]

前缀和的应用:

  • 当你想在一个区间进行统一的加上一个数或者减去一个数的时候,一个个操作会很慢,并且涉及多次操作的时候更新很麻烦,但是我们可以结合这个差分和前缀和进行快速求解

  • 一维:

# 在区间l到r之间同时都加上a,那么我们只需在num[l] + a,在num[r+1] -a
# 然后求解前缀和即可,就可以得到每个位置的最后的值
  • 二维:
# 1<=x1<=x2<=y1<=y2<=n
# 在x1,y1 到 x2,y2 之间都加上一个数
num[x1][y1] += a
num[x2+1]y2+1] +=a
num[x1][y2+1] -=a
num[x2+1][y1] -=a

差分:

  • 一维差分:
# 1<=l<=r<=n ,那么区间l到r之间的和值为
ans = pre[r] - pre[l-1]
  • 二维查分:
# 
ans = pre[x2][y2] - pre[x2][y1] - pre[x1][y2] + pre[x1][y1]

题目

求和

求和

在这里插入图片描述

思路分析:

  • 首先直接暴力是肯定不行的,所以得考虑转换?发现可以提取相同的元素,然后使用这个前缀和进行优化即可
import os
import sys# 请在此输入您的代码# 提取公因式,你会发现 ans = a1*(a2+···an) + a2*(a3+···an) + an-1*(an)n = int(input())
num = list(map(int,input().split()))pre = [0]*(n+1)
for i in range(n):pre[i+1] = pre[i] + num[i]ans = 0
for i in range(n-1):ans += num[i]*(pre[n]-pre[i+1])
print(ans)

棋盘

棋盘

在这里插入图片描述

思路分析:

  • 这个题目得使用到这个二维的前缀和与查分进行优化
import os
import sys# 请在此输入您的代码# 其实和这个,异或操作是类似的
# 0表示白色,1表示黑色n,m = map(int,input().split())num = [[0]*(n+1) for _ in range(n+1)]for _ in range(m):x1,y1,x2,y2 = map(int,input().split())x1,y1,x2,y2 = x1-1,y1-1,x2-1,y2-1num[x1][y1] += 1num[x2+1][y2+1]     +=1num[x1][y2+1]   -=1num[x2+1][y1]   -=1# 求解二维前缀和
dp = [[0]*(n+1) for _ in range(n+1)]for i in range(n):for j in range(n):dp[i+1][j+1] = (dp[i+1][j] + dp[i][j+1] - dp[i][j] + num[i][j])%2for i in range(1, n + 1):row = "".join(str(dp[i][j]) for j in range(1, n + 1))print(row)

挖矿

挖矿

在这里插入图片描述

思路分析:

  • 首先明确一个问题,在坐标轴上移动,最多只能转向一次:证明,设你转向多次之后到达左端点是 l,到达右端点的坐标是 r,如果你直接一开始不转向,直接到达左端点l,然后再直接向后转向右边,那么到达的距离是肯定比r大的
import os
import sys# 请在此输入您的代码
n,m = map(int,input().split())
num = list(map(int,input().split()))
# 开的空间
l ,r = [0]*(m + 1),[0]*(m + 1)iszero = 0for i in num:if i > 0 and i <= m:r[i] += 1if i < 0 and abs(i) <= m:l[abs(i)] += 1if i == 0:iszero = 1# 计算出其中的左和右可以到达的位置所能得到的矿
for i in range(1,m+1):r[i] += r[i-1]l[i] += l[i-1]
ans = 0# 枚举可以到达的端点,注意左边和右边
for j in range(1,m//2 + 1):ans = max(ans,r[j] + l[m-2*j],l[j] + r[m-2*j])print(ans+iszero)
http://www.cadmedia.cn/news/2975.html

相关文章:

  • 长春做网站哪家好站长之家端口扫描
  • 湖北网站推广服务营销软文网站
  • 郑州公司网站平台建设35个成功的市场营销策划案例
  • 宁波网站设计建站服务公司百度收录量查询
  • golang建设网站公众号如何推广运营
  • 靠谱网站建设公司报价seo小白入门
  • 淘客推广网站怎么做的互联网营销的方式有哪些
  • 玉林建设公司网站百度招聘2022年最新招聘
  • 黄页app下载seo网站有优化培训班吗
  • 东莞网站竞价推广百度网络营销
  • 网络系统安全原则苏州排名搜索优化
  • 安徽省途顺建设工程有限公司网站新网站如何让百度收录
  • 高密市住房和城乡建设局网站汕头百度网站推广
  • 网站技术解决方案是什么搜索关键词的网站
  • 南京专业网站制作公司有哪些百度app怎么找人工客服
  • app设计理念优化营商环境发言稿
  • 群晖 建站 Wordpress淘词神器
  • 网站建设锚点链接如何做好产品网络推广
  • 精品网站建设费用 干净磐石网络哪个模板建站好
  • 宁波seo链接优化北京官方seo搜索引擎优化推荐
  • 珠海做网站公司哪家好视频剪辑培训班
  • 手机测评做视频网站百度竞价排名背后的伦理问题
  • 网站常规seo优化步骤注册一个域名需要多少钱
  • 商城网站建设浩森宇特专业网络推广
  • 建站abc永久免费0元建站不受国内限制的搜索引擎
  • 免费网站app软件企业广告宣传
  • asp做静态网站深圳优化seo排名
  • 宁波网站建设就业方向昆明seo关键字推广
  • 网站建设bbs关键词推广营销
  • 网页游戏网站2345仿站定制模板建站