dw做网站详细教程,张家港网站关键词优化,临沂百度公司地址,长沙百度快速优化CCF CSP认证 历年题目自练Day17
题目一
试题编号#xff1a; 201803-1 试题名称#xff1a; 跳一跳 时间限制#xff1a; 1.0s 内存限制#xff1a; 256.0MB 问题描述#xff1a; 问题描述 近来#xff0c;跳一跳这款小游戏风靡全国#xff0c;受到不少玩家的喜爱…CCF CSP认证 历年题目自练Day17
题目一
试题编号 201803-1 试题名称 跳一跳 时间限制 1.0s 内存限制 256.0MB 问题描述 问题描述 近来跳一跳这款小游戏风靡全国受到不少玩家的喜爱。 简化后的跳一跳规则如下玩家每次从当前方块跳到下一个方块如果没有跳到下一个方块上则游戏结束。 如果跳到了方块上但没有跳到方块的中心则获得1分跳到方块中心时若上一次的得分为1分或这是本局游戏的第一次跳跃则此次得分为2分否则此次得分比上一次得分多两分即连续跳到方块中心时总得分将2468…。 现在给出一个人跳一跳的全过程请你求出他本局游戏的得分按照题目描述的规则。 输入格式 输入包含多个数字用空格分隔每个数字都是120之一1表示此次跳跃跳到了方块上但是没有跳到中心2表示此次跳跃跳到了方块上并且跳到了方块中心0表示此次跳跃没有跳到方块上此时游戏结束。 输出格式 输出一个整数为本局游戏的得分在本题的规则下。 样例输入 1 1 2 2 2 1 1 2 2 0 样例输出 22 数据规模和约定 对于所有评测用例输入的数字不超过30个保证0正好出现一次且为最后一个数字。
题目分析个人理解
常规输入直接放到列表llist(map(int,input().split())) 再看输入1就加一分2第一次出现就加两分如果连续出现就累加2即连续跳到方块中心时总得分将2468…那很好办直接多分支语句就可以解决我用a作为累加器sum存放总得分。直接上代码
llist(map(int,input().split()))
two0
a0
for i in range(len(l)):if l[i]1:sum1a0elif l[i]2 and a0:sum2a2elif l[i]2 and a!0:a2sumaelif l[i]0:break
print(sum)
题目二
试题编号 201803-2 试题名称 碰撞的小球 时间限制 1.0s 内存限制 256.0MB 问题描述 问题描述 数轴上有一条长度为LL为偶数)的线段左端点在原点右端点在坐标L处。有n个不计体积的小球在线段上开始时所有的小球都处在偶数坐标上速度方向向右速度大小为1单位长度每秒。 当小球到达线段的端点左端点或右端点的时候会立即向相反的方向移动速度大小仍然为原来大小。 当两个小球撞到一起的时候两个小球会分别向与自己原来移动的方向相反的方向以原来的速度大小继续移动。 现在告诉你线段的长度L小球数量n以及n个小球的初始位置请你计算t秒之后各个小球的位置。 提示 因为所有小球的初始位置都为偶数而且线段的长度为偶数可以证明不会有三个小球同时相撞小球到达线段端点以及小球之间的碰撞时刻均为整数。 同时也可以证明两个小球发生碰撞的位置一定是整数但不一定是偶数。 输入格式 输入的第一行包含三个整数n, L, t用空格分隔分别表示小球的个数、线段长度和你需要计算t秒之后小球的位置。 第二行包含n个整数a1, a2, …, an用空格分隔表示初始时刻n个小球的位置。 输出格式 输出一行包含n个整数用空格分隔第i个整数代表初始时刻位于ai的小球在t秒之后的位置。 样例输入 3 10 5 4 6 8 样例输出 7 9 9 样例说明 初始时三个小球的位置分别为4, 6, 8。 一秒后三个小球的位置分别为5, 7, 9。
两秒后第三个小球碰到墙壁速度反向三个小球位置分别为6, 8, 10。
三秒后第二个小球与第三个小球在位置9发生碰撞速度反向注意碰撞位置不一定为偶数三个小球位置分别为7, 9, 9。 四秒后第一个小球与第二个小球在位置8发生碰撞速度反向第三个小球碰到墙壁速度反向三个小球位置分别为8, 8, 10。 五秒后三个小球的位置分别为7, 9, 9。 样例输入 10 22 30 14 12 16 6 10 2 8 20 18 4 样例输出 6 6 8 2 4 0 4 12 10 2 数据规模和约定 对于所有评测用例1 ≤ n ≤ 1001 ≤ t ≤ 1002 ≤ L ≤ 10000 ai L。L为偶数。 保证所有小球的初始位置互不相同且均为偶数。
题目分析个人理解
题目又是又臭又长的感觉不过意思很好理解简而言之将n个小球放到一个长为l的线段上l是偶数小球初始位置也是偶数且开始方向都是向右每个小球速度相同碰到边缘或者碰到别的小球就换方向由于长度和初始位置都是偶数所以不存在三个以及三个小球以上的小球碰撞的情况题目有提示。还是先看输入那就常规操作都快打烂了。第一行输入n,L,t list(map(int,input().split()))第二行输入的是n个小球的初始位置positionslist(map(int,input().split()))好很好关键的地方来了注意输出我们究竟要的是什么是t时间后的每个小球的位置我用一个空列表存储小球的运动方向1表示向右运动-1就是向左运动位序就是小球的编号。刚开始小球放上去都是向右运动的 那直接用append()方法直接追加写入1。 6. 对于碰撞的情况有三种第一种碰到右壁换方向第二种碰到左壁换方向这两种情况很好解决直接判断positions的值如果是0意味着碰左壁大于等于 l 意味着碰右壁第三种是小球两两碰撞后改变方向这种情况要注意发生的位置范围。positions的值记录的是每个小球的当前位置speed的值是动态的根据碰撞情况确定方向1或-1,我从第一秒一直遍历到第t秒再加上初始位置就是小球的最后位置。这也是输出需要的值 然后遍历positions列表输出即可第三种情况怎么解决positions的位序代表小球编号值代表位置注意第三种情况只可能在位置为1到 l-1 位置发生。只有两个小球碰撞的情况所以直接遍历比较编号为k和k1的小球的positons的值如果相等我就改变k和k1小球的运动方向。上代码
n,L,t list(map(int,input().split()))
positionslist(map(int,input().split()))
speed []
for i in range(n):speed.append(1)
for j in range(t):for k in range(n):if positions[k] 0 or positions[k] L:speed[k] -speed[k]for l in range(k1,n):if positions[k] positions[l]:speed[k] -speed[k]speed[l] -speed[l]for m in range(n):positions[m] speed[m]
for o in range(n):print(positions[o],end )
总结
在这个最容易躁动的年纪想要沉下心来做忠于自己内心的事情确实是一件难事。——————shangzhaoyun 2023.9.30