CCF CSP认证 历年题目自练Day36

2023-10-22 22:01

本文主要是介绍CCF CSP认证 历年题目自练Day36,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目一

试题编号: 202309-1
试题名称: 坐标变换(其一)
时间限制: 1.0s
内存限制: 512.0MB
问题描述:
问题描述
对于平面直角坐标系上的坐标 (x,y),小 P 定义了一个包含 n 个操作的序列 T=(t1,t2,⋯,tn)。其中每个操作 ti(1≤i≤n)包含两个参数 dxi 和 dyi,表示将坐标 (x,y) 平移至 (x+dxi,y+dyi) 处。

现给定 m 个初始坐标,试计算对每个坐标 (xj,yj)(1≤j≤m)依次进行 T 中 n 个操作后的最终坐标。

输入格式
从标准输入读入数据。

输入共 n+m+1 行。

输入的第一行包含空格分隔的两个正整数 n 和 m,分别表示操作和初始坐标个数。

接下来 n 行依次输入 n 个操作,其中第 i(1≤i≤n)行包含空格分隔的两个整数 dxi、dyi。

接下来 m 行依次输入 m 个坐标,其中第 j(1≤j≤m)行包含空格分隔的两个整数 xj、yj。

输出格式
输出到标准输出中。

输出共 m 行,其中第 j(1≤j≤m)行包含空格分隔的两个整数,表示初始坐标 (xj,yj) 经过 n 个操作后的位置。

样例输入
3 2
10 10
0 0
10 -20
1 -1
0 0

样例输出
21 -11
20 -10

样例说明
第一个坐标 (1,−1) 经过三次操作后变为 (21,−11);第二个坐标 (0,0) 经过三次操作后变为 (20,−10)。

评测用例规模与约定
全部的测试数据满足:n,m≤100,所有输入数据(x,y,dx,dy)均为整数且绝对值不超过 100000。

题目分析(个人理解)

  1. 先看输入,第一行输入n次操作,m个坐标,第二行到n+1行输入每次操作的x,y的值,第n+1到第n+1+m行输入原坐标。
  2. 可以先将多次操作先计算合并成一次再计算,可以用列表存,然后边存边合并,输入原坐标后做一次计算输出即可。
  3. 傻瓜代码:
n,m=map(int,input().split())
l=[]
l1=[0,0]
l2=[]
l3=[0,0]
l4=[]
for i in range(n):d=list(input().split())#存操作l.append(d)l1[0]+=int(l[i][0])l1[1]+=int(l[i][1])#print(l1)
for j in range(m):d1=list(input().split())#存坐标l3[0]=int(d1[0])+int(l1[0])l3[1]=int(d1[1])+int(l1[1])print('{} {}'.format(l3[0],l3[1]))
  1. 优化之后:
n, m = map(int,input().split())
temp_x = temp_y = 0
for i in range(n):x1, y1 = map(int, input().split())temp_x += x1temp_y += y1
for i in range(m):x, y = map(int, input().split())x += temp_xy += temp_yprint('{} {}'.format(x,y))

题目二

试题编号: 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
Data
样例输出
-1858706.758 -83259.993
-1261428.46 201113.678
-75099.123 -738950.159
-119179.897 -789457.532
114151.88 -366009.892
在这里插入图片描述
提示
C/C++:建议使用 double 类型存储浮点数,并使用 scanf(“%lf”, &x); 进行输入,printf(“%f”, x); 输出,也可以使用 cin 和 cout 输入输出浮点数;#include <math.h> 后可使用三角函数 cos() 和 sin()。

Python:直接使用 print(x) 即可输出浮点数 x;from math import cos, sin 后可使用相应三角函数。

Java:建议使用 double 类型存储浮点数,可以使用 System.out.print(x); 进行输出;可使用 Math.cos() 和 Math.sin() 调用三角函数。

题目分析(个人理解)

  1. 我先讲本人的思路和对题目的理解,还是先看题目第一行输入n个参数表示有多少种操作,参数m表示有几个原坐标需要处理,最后的m行输入的四个参数i j x y分别表示从i到j对(x,y)操作,比如样例第一行,1 6操作,实际上是对后面的坐标做从编号1到6操作的每一步操作,然后输出结果。
  2. 我设置一个字典,keys表示操作编号,值是列表,列表的0位的数值表示是旋转还是拉伸操作,1位表示k或弧度。
  3. 代码如下:(想到前缀和但是未能实现)
#80分超时
from math import cos,sin
n,m=map(int,input().split())
l1=[]for i in range(n):operate=list(input().split())#存放操作l1.append(operate)
l=[str(i) for i in range(1,n+1)]#给操作编号
dict1=dict(zip(l,l1))#关键字是操作编号,值的第一个元素是1或2
y,x=0,0
#print(dict1)
for k in range(m):l2=list(map(int,input().split()))#存i j x yx,y=l2[2],l2[3]for j in range(l2[0],l2[1]+1):if dict1[str(j)][0]=='1':#伸缩x ,y= float(x) * float(dict1[str(j)][1]),float(y) * float(dict1[str(j)][1])if dict1[str(j)][0]=='2':#旋转x,y= float(x) * cos(float(dict1[str(j)][1])) - float(y) * sin(float(dict1[str(j)][1])),float(x) * sin(float(dict1[str(j)][1]))+float(y)*cos(float(dict1[str(j)][1]))print('{:.3f} {:.3f}'.format(x,y))
  1. 写的好看一点的超时代码(80分)
from math import cos,sin#拉伸
def draw_1(k,x,y):x1=k*x;y1=k*y;return x1,y1
#旋转
def rotate_2(a,x,y):x2=x*cos(a)-y*sin(a);y2=x*sin(a)+y*cos(a)return x2,y2#输入n和m,空格隔开
n, m=tuple(map(eval,input().split()))
list1,list2=[],[]#输入n个操作list1[]
for i in range(n):n1, n2=tuple(map(eval,input().split()))list1.append((n1, n2))#输入m个查询并计算list2[]
for j in range(m):m1, m2, m3, m4=tuple(map(eval,input().split()))for k in range(m1, m2+1):if list1[k-1][0]==1:m3, m4= draw_1(list1[k-1][1], m3, m4)else:m3, m4= rotate_2(list1[k-1][1], m3, m4)list2.append((m3, m4))for l in list2:print(round(l[0],3),end=' ');print(round(l[1],3))

总结

本人从2023.9.14开始刷题从13年12月的题刷到23年10月的题因为能力有限只做了第一题和第二题,发现本人知识框架还未完善,CCF CSP认证打卡不会间断只不过最近几期除了做第三题还会增加对的pyhton程序设计的全面完善,比如对很多第三方库的知识梳理,以及数据结构的知识综合编程题来应用,本人将会不停探索一切学习方法,力求提高编程和优化算法的能力!!!
路漫漫其修远兮,希望与诸君一起进步!!!

这篇关于CCF CSP认证 历年题目自练Day36的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/263870

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

SpringSecurity6.0 如何通过JWTtoken进行认证授权

《SpringSecurity6.0如何通过JWTtoken进行认证授权》:本文主要介绍SpringSecurity6.0通过JWTtoken进行认证授权的过程,本文给大家介绍的非常详细,感兴趣... 目录项目依赖认证UserDetailService生成JWT token权限控制小结之前写过一个文章,从S

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

一文详解kafka开启kerberos认证的完整步骤

《一文详解kafka开启kerberos认证的完整步骤》这篇文章主要为大家详细介绍了kafka开启kerberos认证的完整步骤,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、kerberos安装部署二、准备机器三、Kerberos Server 安装1、配置krb5.con

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Golang的CSP模型简介(最新推荐)

《Golang的CSP模型简介(最新推荐)》Golang采用了CSP(CommunicatingSequentialProcesses,通信顺序进程)并发模型,通过goroutine和channe... 目录前言一、介绍1. 什么是 CSP 模型2. Goroutine3. Channel4. Channe

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入