小蓝有一个充电器,可以使用不同的电压和电流充电。
给定充电器工作的记录,请计算在这个记录期间总共通过充电传输了多少电能。
输入格式
输入第一行包含一个整数 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)