CCF CSP认证 历年题目自练Day49

题目一

此题用暴力枚举做过(80分)现如今终于用二维前缀和做到满分。

请添加图片描述
试题编号: 202309-2
试题名称: 坐标变换(其二)
时间限制: 2.0s
内存限制: 512.0MB
问题描述:
问题描述
请添加图片描述
样例输入:
10 5
2 0.59
2 4.956
1 0.997
1 1.364
1 1.242
1 0.82
2 2.824
1 0.716
2 0.178
2 4.094
1 6 -953188 -946637
1 9 969538 848081
4 7 -114758 522223
1 9 -535079 601597
8 8 159430 -511187
样例输出
-1858706.758 -83259.993
-1261428.46 201113.678
-75099.123 -738950.159
-119179.897 -789457.532
114151.88 -366009.892请添加图片描述

题目分析(个人理解)

  1. 其实对于二维数据的存储和处理非常想用numpy的,但是考试的IOI机子不支持,只能用常规的二维列表存储。
  2. 使用一个列表an[]存每一步操作之后的参数,由于对于一个坐标有两种操作,一种拉伸一种旋转,所以是个二维列表,第一维度表示查询的序号。第二维度表示该查询的具体内容(拉伸多少倍或旋转多少度),因此第二维度的第一个元素用1初始化(表示拉伸,可直接乘拉伸倍数即可)第二个元素用0初始化(表示旋转,只需要做加法加即可)
  3. 注意规则,**i和j是开始查询数到结束,经历的操作是从i到j。有两种思想,第一种暴力穷举,每输入一个要处理的坐标就进行一次遍历,因此超时只能80分,第二种二维前缀和的思想,每输入一行查询操作就假想已经执行并且存入数组,这样在后续执行的时候只需要切片即可,大大降低时间复杂度。
  4. 如何截取前缀和的一部分?不难发现对于拉伸倍数只需要用除法判断从i到j进行每一步查询之后总的拉伸倍数即可,对于旋转,只需用末减初即可判断最后到底拉伸了多少最后按照公式计算即可。
  5. 上代码!!!
import mathn,m = map(int,input().split())#设置前缀积的初始化
an = []
an.append([1,0])for i in range(n):#存入执行每一步之后的拉伸和旋转参数kind,act = input().split()if kind == '1':#如果是拉伸temp1 = an[i][0]*float(act)temp2 = an[i][1]an.append([temp1,temp2])else:#如果是旋转temp2 = an[i][1]+float(act)temp1 = an[i][0]an.append([temp1, temp2])for v in range(m):#开始切片操作执行i,j,x,y = map(int,input().split())k = an[j][0] / an[i-1][0]#对于拉伸做除法c = an[j][1] - an[i-1][1]#对于旋转做减法dx = k*(x*math.cos(c) - (y*math.sin(c)))dy = k*(x*math.sin(c) + (y*math.cos(c)))print("{:.3f} {:.3f}".format(dx,dy))

题目二

【问题描述】给定一个N×M的矩阵A,请你统计有多少个子矩阵 (最小1×1,最大N×M) ,满足子矩阵中所有数的和不超过给定的整数K?
【输入格式】第一行包含三个整数N, M和K,之后N行每行包含M个整数,代表矩阵A
【样例输入】
3 4 10
1 2 3 4
5 6 7 8
9 10 11 12
【样例输出】
19
【评测用例规模与约定】
30%的数据,N, M≤20 5分
70%的数据,N, M≤100 10分
100%的数据,1≤N, M≤500 15分

0≤Ai j≤1000; 1≤K≤250000000

题目分析(个人理解)

  1. “二维前缀和”,定义s[][]:
    s[i][j]表示子矩阵[1, 1] ~ [i, j]的和
    (1)预计算出s[][],然后快速计算二维子区间和:
    (2)阴影子矩阵[i1, j1] ~ [i2, j2]区间和,等于:
    s[i2][j2] - s[i2][j1-1] - s[i1-1][j2] + s[i1-1][j1-1]
    其中s[i1-1][ j1-1]被减了2次,需要加回来1次
  2. 本题统计二维子矩阵和≤k的数量,而不用具体指出是哪些子矩阵,可以用尺取法优化。在这里插入图片描述
    以一维区间和为例,查询有多少子区间[j1, j2]的区间和s[j2] - s[j1] ≤ k。
    在这里插入图片描述

若s[j2] - s[j1] ≤ k,那么在子区间[j1, j2]上,有j2 - j1+1个子区间满足≤ k。用同向扫描的尺取法,用滑动窗口[j1, j2]遍历,复杂度降为O(n)。
对于二维,矩阵的行子区间和仍用2重暴力遍历只把列区间和用尺取法优化。
3. 上代码!!!

n, m, k = map(int, input().split())
a = [[0] for i in range(n)]
a.insert(0,[0]*(m+1))
for i in range(1,n+1):         #从a[1][1]开始,读矩阵a[i].extend(map(int, input().split()))
s = [[0]*(m+1) for i in range(n+1)]
for i in range(1,n+1):for j in range(1,m+1):s[i][j] = s[i-1][j] + a[i][j]
ans = 0
for i1 in range(1,n+1):for i2 in range(i1,n+1):j1=1; z=0for j2 in range(1,m+1):z += s[i2][j2]-s[i1-1][j2]  while z>k:                     z -= s[i2][j1]-s[i1-1][j1]j1 += 1             ans += j2-j1+1            
print(ans)

总结

请添加图片描述
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/161652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NFC:应用场景广泛的短距离通信技术

NFC:应用场景广泛的短距离通信技术 一、NFC 技术介绍1.1 NFC 技术应用场景1.2 NFC 技术优点1.3 NFC 工作原理 二、NFC 开发2.1 NFC 应用开发流程2.2 NFC 读取和写入2.3 NFC 读写功能示例 三、总结 一、NFC 技术介绍 NFC (Near-field communication&…

分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测

分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测 目录 分类预测 | Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现基于PSO-PNN粒子群算法优化概率神经网络的数据…

hadoop在本地创建文件,然后将文件拷贝/上传到HDFS

1.要$cd {对应目录}进入到对应目录,一般为 cd /usr/local/hadoop/ 2.创建文件,$sudo gedit {文件名},例 sudo gedit test.txt 然后在弹出的txt文件输入内容,点击右上角的保存之后,关闭即可。 3.拷贝本地文件到HDF…

RPG项目_UI登录

首先创建一个项目 将资源包导进Resources文件夹 创建一个Scripts脚本文件夹 然后再对Scripts脚本文件夹分门别类 导入UI资源包 创建一个Image 按住Alt 选择右下角 image就会覆盖整个面板 修改image名字为BG 将image图片放置背景栏 再创建一个image 改名为MainMenu 修改MainMenu…

Linux上通过SSL/TLS和start tls连接到LDAP服务器

一,大致流程。 1.首先在Linux上搭建一个LDAP服务器 2.在LDAP服务器上安装CA证书,服务器证书,因为SSL/TLS,start tls都属于机密通信,需要客户端和服务器都存在一个相同的证书认证双方的身份。3.安装phpldapadmin工具&am…

一点DETR学习

DETR: 主要是为了学习query。 主要从两个方面:加偏好和缩短序列长度

〖大前端 - 基础入门三大核心之JS篇㊶〗- DOM事件传播和事件监听方法addEventListener()

说明:该文属于 大前端全栈架构白宝书专栏,目前阶段免费,如需要项目实战或者是体系化资源,文末名片加V!作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

ABAP调用Https接口 Ssl证书导入

ABAP调用Https接口 Ssl证书导入 一、证书导入 谷歌浏览器打开对方系统URL地址,下载SSL Server certificate,步骤如下: 浏览器打开要导出certificate(证书)的网站,点击这个小锁的图标: 点击连接是安全的后面小播放按钮 点击证…

系列七、ThreadLocal为什么会导致内存泄漏

一、ThreadLocal为什么会导致内存泄露 1.1、ThreadLocalMap的基本结构 ThreadLocalMap是ThreadLocal的内部类,没有实现Map接口,用独立的方式实现了Map的功能,其内部的Entry也是独立实现的。源码如下: 1.2、ThreadLocal引用示意图…

分享一篇很就以前的文档-VMware Vsphere菜鸟篇

PS:由于内容是很久以前做的记录,在整理过程中发现了一些问题,简单修改后分享给大家。首先ESXI节点和win7均运行在VMware Workstation上面,属于是最底层,而新创建的CentOS则是嵌套后创建的操作系统,这点希望…

MySQL--慢查询(一)

1. 查看慢查询日志是否开启 show variables like slow_query%; show variables like slow_query_log; 参数说明: 1、slow_query_log:这个参数设置为ON,可以捕获执行时间超过一定数值的SQL语句。 2、long_query_time:当SQL语句执行…

CST同轴馈电步骤

CST同轴馈电步骤 算例1. 同轴内芯2. 填充材料3. 外皮4. GND减去一个圆形,使EMWAVE可以通过5. 添加端口6. 结果比较 算例 cst模型库中的一个圆贴片 1. 同轴内芯 2. 填充材料 他这里直接使用和介质基板一样的材料并且进行了合并,我就懒得再改了&#x…

java代码调用twitter-api用例实战

一、申请twitter开发者账号 首先先申请twitter开发者免费的API,要填写申请的内容,放心大胆地写,申请完,会提供免费的API接口。 以下是我申请到的三个免费API 申请完开始进行测试调用。 读官方文档账户认证那块:https…

《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 1、2023 Hackaday大赛胸牌开源 Vectorscope-main.zip (66.83MB) GitHub - Hack-a-Day/Vectorscope: Vectorscope badg…

vue3项目中使用富文本编辑器

前言 适配 Vue3 的富文本插件不多,我看了很多插件官网,也有很多写的非常棒的,有UI非常优雅让人耳目一新的,也有功能非常全面的。 如: Quill,简单易用,功能全面。editorjs,UI极其优…

echarts的横向柱状图文字省略,鼠标移入显示内容 vue3

效果图 文字省略 提示 如果是在x轴上的,就在x轴上添加triggerEvent: true,如果是y轴就在y轴添加,我是在y轴上添加的 并且自定义的方法(我取名为extension) // echarts 横向省略文字 鼠标移入显示内容 export const extension…

AT89S52单片机的最小应用系统

目录 ​一.时钟电路设计 1.内部时钟方式 2.外部时钟方式 3.时钟信号的输出 二.机器周期,指令周期与指令时序 1.时钟周期 2.机器周期 3.指令周期 三.复位操作和复位电路 1.复位操作 2 复位电路设计 四.低功耗节电模式 AT89S52本身片内有8KB闪烁存储器&am…

Redisson分布式锁源码解析

一、使用Redisson步骤 Redisson各个锁基本所用Redisson各个锁基本所用Redisson各个锁基本所用 二、源码解析 lock锁 1) 基本思想: lock有两种方法 一种是空参 另一种是带参 * 空参方法:会默认调用看门狗的过期时间30*1000&…

真实网络中的 bbr

本文包含中心极限定理,大数定律,经济规律等,bbr 倒没多少,不过已经习惯把 bbr 当靶子了。 上周写了 揭秘 bbr 以及 抢带宽的原理,我对自己说,这都是理论上如何,可实际上呢。于是有必要结合更实际…

ubuntu cutecom串口调试工具使用方法(图形界面)

文章目录 Ubuntu下使用CuteCom进行串口调试使用指南什么是CuteCom?主要特点 安装CuteCom使用APT包管理器从源码编译安装 配置串口CuteCom界面解析(启动cutecom)使用CuteCom进行数据发送和接收配置串口参数数据接收数据发送 高级功能和技巧流控…