蓝桥杯模拟赛

小蓝有一个充电器,可以使用不同的电压和电流充电。
给定充电器工作的记录,请计算在这个记录期间总共通过充电传输了多少电能。

输入格式
输入第一行包含一个整数 n , 表示记录的条数。

接下来 n 行,每行包含一个时刻 T 和两个非负整数 U, I,表示在时刻 T 充电电压变为 U(单位伏),电流变为 I(单位A)。最后一行满足 U 和 I 均为 0,在前面的行中也可能出现 U、I 为 0 的情况。其中时间表示为 HH:MM:SS 的格式,时分秒分别用两位十进制数表示(补前导零)。
输入保证时刻依次递增且在 00:00:00 至 23:59:59 的区间内,不用考虑跨过零点充电的情况。

输出格式
输出一个整数,表示总共通电的电能为多少焦耳,其中 1 焦耳等于 1 伏乘以1 安乘以 1 秒。

样例输入
3
12:00:00 12 1
12:01:02 5 2
12:01:10 0 0

样例输出
824

评测用例规模与约定
对于所有评测用例,1 < = n < = 100 , 0 < = U , I < = 100 1<=n<=100,0<=U,I<=1001<=n<=100,0<=U,I<=100
————————————————
 


这道题的思路就是当前的时间减去上一个时间然后乘上UI,然后累加。就是最终答案。

def get_second(t):
    h,m,s=map(int,t.split(":"))
    return h*3600+m*60+s



n=int(input())
a=[]
ans=0
for i in range(n):
    t,u,I=input().split()
    u,I=int(u),int(I)
    t=get_second(t)
    a.append((t,u,I))
for i in range(n-1):
    time=a[i+1][0]-a[i][0]
    v=a[i][1]
    II=a[i][2]
    ans+=time*v*II
print(ans)

请找到一个大于 2022 的最小数,这个数转换成十六进制之后,所有的数位(不含前导 0)都为字母(A 到F)。请将这个数的十进制形式作为答案提交
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。


先给出暴力的做法,先构造题目所要求的二维矩阵,然后枚举四个方向,一个一个暴搜 


res = float('inf')
m=[[0]*100 for i in range(100)]
for i in range(100):
    m[i][0]=i+1
    for j in range(1,100):
        m[i][j]=m[i][j-1]+2
        
        
def sum(a,b,c,d):
    ans=0
    for i in range(a,b+1):
        for j in range(c,d+1):
            ans+=m[i][j]
    return ans
#枚举上下左右四个方向    
for i in range(100):
    for j in range(i,100):
        for k in range(100):
            for z in range(k,100):
                ans=sum(i,j,k,z)
                if ans==2022:
                    res=min(res,(j-i+1)*(z-k+1))
                    
                elif ans>2022:
                    break
print(res)

再来看看二维矩阵做法


 

m=[[0]*101 for i in range(101)]
for i in range(1,101):
    m[i][1]=i
    for j in range(2,101):
        m[i][j]=m[i][j-1]+2


for i in range(1,101):
    for j in range(1,101):
        m[i][j]+=m[i-1][j]+m[i][j-1]-m[i-1][j-1]

res=float('inf')
#枚举上下左右四个方向
for i in range(1,101):
    for j in range(i,101):
        for k in range(1,101):
            for z in range(k,101):
               if m[j][z]-m[i-1][z]-m[j][k-1]+m[i-1][k-1]==2022:
                   res=min(res,(j-i+1)*(z-k+1))
                   
print(res)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值