0
点赞
收藏
分享

微信扫一扫

数列求值,灌溉(python)

那小那小 2022-04-02 阅读 85

文章目录

数列求值

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

给定数列 1, 1, 1, 3, 5, 9, 17, \cdots1,1,1,3,5,9,17,⋯,从第 44 项开始,每项都是前 33 项的和。

求第 2019032420190324 项的最后 44 位数字。

运行限制
最大运行时间:1s
最大运行内存: 128M

分析

  • 简单的类斐波那契数列,直接使用递推即可,不过最好每一步都取余10000,有利于计算。尤其c语言这部操作可以防止数据溢出

运行代码

a,b,c = 1,1,1
for i in range(4,20190325):
  a,b,c = b%10000,c%10000,(a+b+c)%10000

print(c)

通过截图

在这里插入图片描述

灌溉

题目描述
小蓝负责花园的灌溉工作。

花园可以看成一个 n 行 m 列的方格图形。中间有一部分位置上安装有出水管。

小蓝可以控制一个按钮同时打开所有的出水管,打开时,有出水管的位置可以被认为已经灌溉好。

每经过一分钟,水就会向四面扩展一个方格,被扩展到的方格可以被认为已经灌溉好。即如果前一分钟某一个方格被灌溉好,则下一分钟它上下左右的四个方格也被灌溉好。

给定花园水管的位置,请问 k 分钟后,有多少个方格被灌溉好?

输入描述
输入的第一行包含两个整数 n,m。

第二行包含一个整数 t,表示出水管的数量。

接下来 t 行描述出水管的位置,其中第 i 行包含两个数 r,c 表示第 r 行第 c 列有一个排水管。

接下来一行包含一个整数 k。

其中,1≤n,m≤100,1≤t≤10,1≤k≤100。

输出描述
输出一个整数,表示答案。

输入输出样例

示例 1
输入
3 6
2
2 2
3 4
1

输出
9

运行限制
最大运行时间:1s
最大运行内存: 128M

分析

  • 注意,这题数据量相对较小,所以可以通过所有测试点。
  • 优化的话,需要在扩散后弄个其他的标记,防止重复搜索四个方向。(写法相对简单,这里不多赘述)

在这里插入图片描述

运行代码

import os
import sys
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
def kuo(r,c):
    global n
    global m
    
    # 搜索四个方向
    for i in range(4):
        x_new = r+dic[i][0]
        y_new = c+dic[i][1]
        if (x_new < 0 or x_new >= n or y_new < 0 or y_new >= m or nums[x_new][y_new] == 1):# 越界或浇过
            continue
        else:
            nums[x_new][y_new] = 1
            


n,m = map(int,input().split())
nums = [[0] * m for _ in range(n)]
dic = [(0,-1),(0,1),(-1,0),(1,0)]
t = int(input())
for i in range(t):
    r,c = map(int,input().split())
    nums[r-1][c-1] = 1
    kuo(r-1,c-1) # 第一分钟扩散
    
k = int(input())-1
while k:
    for i in range(n):
        for j in range(m):
            if nums[i][j]:
                kuo(r,c)
    k-=1
    
res = 0    
for i in range(n):
    for j in range(m):
        if nums[i][j] == 1:
            res+=1
print(res)

通过截图

在这里插入图片描述

如有错误,敬请指正,欢迎交流,谢谢♪(・ω・)ノ

举报

相关推荐

0 条评论