CCF CSP认证 历年题目自练Day49

news2025/1/15 19:59:42

题目一

此题用暴力枚举做过(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 math

n,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=0
        for 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.coloradmin.cn/o/1240009.html

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

相关文章

python基于GCN(图卷积神经网络模型)和LSTM(长短期记忆神经网络模型)开发构建污染物时间序列预测模型

在以往的时间序列预测建模中广泛使用的是回归类算法模型和RNN类的算法模型,相对来说技术栈会更稳定一些,最近有一个实际业务场景的需求,在建模的过程中要综合考虑其余点位的影响依赖,这时候我想到了之前做过的交通流量和速度预测相…

【软件测试】接口——基本测试流程

1、接口测试需求获取 (1)获取接口文档 (2)通过接口文档获取接口信息 (3)确认接口测试需求 2、 接口测试计划编写 (1)目标:确认需求、资源、方法、进度方案 &#x…

【VScode】安装配置、插件及远程SSH连接

一、VSCode安装 二、配置安装插件 三、配置远程连接SSH 四、MinGW 一、VSCode安装 VS官网 Visual Studio Code - Code Editing. Redefined下载安装包: 二、配置安装插件 安装中文插件 配置字体为20 配置文件–>首选项->设置->Font Size为20 设置 VSC…

想分析全国用电及煤气、液化石油气供应利用情况,这部分数据对你有帮助!

随着经济的发展和人民生活水平的提高,能源的需求量越来越大。其中,电力和煤气、液化石油气等能源的供应利用情况与我们的日常生活息息相关。 今天我们根据《中国城市统计年鉴》统计的中国地级及以上城市的煤气及液化石油气供应及利用情况的指标&#xff…

芯片被磨掉型号分辨不出怎么解决?

很多电子工程师,在芯片或单片机解密时,经常会遇到芯片被加密的情况,更糟糕的是这个芯片的型号被打磨了,无法确定其准确型号,那么如何解决?今天凡小亿开课好好讲讲,希望对小伙伴们有所帮助。 1、…

11.6AOP

一.AOP是什么 是面向切面编程,是对某一类事情的集中处理. 二.解决的问题 三.AOP的组成 四.实现步骤 1.添加依赖(版本要对应): maven仓库链接 2.添加两个注解 3.定义切点 4.通知 5.环绕通知 五.execution表达式 六.AOP原理 1.建立在动态代理的基础上,对方法级别的拦截. 2.…

Arcgis中通过函数实现字符串截取

效果 从字符串中提取最右侧的符号,如“/”后面的字符串 步骤 1、VB dim bbindexinstrrev( [WGCJ] ,"/")bbright( [WGCJ] ,len( [WGCJ] )- index )2、python def bb(aa):index(aa.rfind("/"))bbaa[index1:]return bb

基于docker实现JMeter分布式压测

为什么需要分布式? 在工作中经常需要对一些关键接口做高QPS的压测,JMeter是由Java 语言开发,没创建一个线程(虚拟用户),JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并…

在windows笔记本中安装tensorflow1.13.2版本的gpu环境2

tensorflow1.13.2版本的gpu环境 看python-anacona的安装只需要看1.1部分即可 目录 1.1 Anaconda安装 1.2 tensorflow-gpu安装 1.3 python编译器-pycharm安装 1.1 Anaconda安装 从镜像源处下载anaconda,地址:Index of /anaconda/archive/ | 北京…

【无标题】dp80采集机和机器人通信相关框架总结

采血机器人通信解析相关框架总结: 类似于dp80,将整个过程进行了分解如下: 类似于dp80,将整个过程进行了分解如下: 上位机界面在进行点击操作的时候,先是通信协议的解析,解析后改变采血的控制状态如下: Dp80主要框架解析࿱

Godot

前言 为什么要研究开源引擎 主要原因有: 可以享受“信创”政策的红利,非常有利于承接政府项目。中美脱钩背景下,国家提出了“信创”政策。这个政策的核心就是,核心技术上自主可控。涉及的产业包括:芯片、操作系统、数据…

Vue 3 渲染机制解密:从模板到页面的魔法

Vue 3 渲染机制解密 前言Vue 3的响应性系统1. **Reactivity API:**2. **Proxy 对象:**3. **Getter 和 Setter:**4. **依赖追踪:**5. **批量更新:**6. **异步更新:**7. **递归追踪:**8. **删除属性:** 虚拟DOM的角色1. **减少直接操作真实 DOM:**2. **高效的批量更新:**3. **跨平…

sonar对webgoat进行静态扫描

安装sonar并配置 docker安装sonarqube,sonarQube静态代码扫描 - Joson6350 - 博客园 (cnblogs.com) 对webgoat进行sonar扫描 扫描结果 bugs Change this condition so that it does not always evaluate to "false" 意思是这里的else if语句不会执行…

git merge 和 git rebase

一、是什么 在使用 git 进行版本管理的项目中,当完成一个特性的开发并将其合并到 master 分支时,会有两种方式: git merge git rebasegit rebase 与 git merge都有相同的作用,都是将一个分支的提交合并到另一分支上,…

Redis的持久化(新)

Redis中数据都保存在内存,但是内存中的数据变换很快,也很容易丢失,比如连接断开、宕机停机等等。而Redis提供的数据持久化机制有RDB(Redis DataBase)和AOF(Append Only File)。 1.RDB RDB是指在指定的时间间隔内将内存中的数据集快照写入到磁…

static和extern

1.extern extern 是⽤来声明外部符号的,如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使⽤ extern 进⾏声明,然后使⽤。 即在一个源文件中想要使用另一个源文件,即可通过这个extern来声明使用。 2.st…

NC65 修改元数据字段长度

NC65 修改元数据字段长度,执行下面sql,执行完后需要重启NC服务才生效。 --属性 update md_property set attrlength 200 where name fphm and classidece96dd8-bdf8-4db3-a112-9d2f636d388f ;--列 update md_column set columnlength 200 where tab…

Java的判空

校验List 在进行参数非空校验时,我们总是容易直接就对任何的东西都来一个! null 其实这样并不完全正确,对list类型来说 不等于null和list.size ! 0是不一样的。 不等于null是指已经声明了list的存在,并且在堆内存中有了引用。 …

ROS设置DHCP option121

配置时,了解格式很关键,16进制填写格式如下: 将要访问的IPV4地址:192.168.100.0/24 192.168.30.254 转换为:掩码 目标网段 网关 0x18c0a864c0a81efe,0不用填写 ROS配置如下图: 抓…

【Qt开发流程】之富文本处理

描述 Scribe框架提供了一组类,用于读取和操作结构化的富文本文档。与Qt中以前的富文本支持不同,新的类集中在QTextDocument类上,而不是原始文本信息。这使开发者能够创建和修改结构化的富文本文档,而不必准备中间标记格式的内容。…