A题
代码:
def Transform(x:int):
s = 0
while x:
s += x%4
x //= 4
return s
ans = 0
for i in range(1,2025):
if bin(i).count('1') == Transform(i):
ans += 1
print(ans)
B题
逆向思考,用总的个数-不符合要求的个数
代码:
print((9**10000-2*8**10000+7**10000)%(10**9+7))
C题
代码:
# 数据读取
n,m = map(int,input().split())
data = []
for _ in range(n):
data.append(list(map(int,input().split())))
# 初始化主对角线和反对角线
ans = 0
l = [[0]*1005 for _ in range(2005)]
r = [[0]*1005 for _ in range(2005)]
# 遍历每个数
for i in range(n):
for j in range(m):
x = data[i][j]
# 将主对角线的元素出现次数和反对角线的元素出现次数累加到ans中
ans += l[i+j][x]+r[j-i][x]
# 主对角线和反对角线的元素次数+1
l[i + j][x]+=1
r[j - i][x]+=1
# 有顺序的,结果需要乘以2
print(ans*2)
D题
代码:
# 这题我们导入datetime库,使用十分方便
from datetime import datetime,timedelta
# 读入T
T = int(input())
# 创建datetime对象
start_time = datetime(1970,1,1,0,0,0)
# 处理T组数据
for _ in range(T):
s = input().split()
# 获取时间,用strptime方法将字符串转换为日期时间对象
this_time = datetime.strptime(s[0]+s[1],"%Y-%m-%d%H:%M:%S")
# 获取闹铃时间间隔x
x = int(s[-1])
# 计算该时间与起始时间的差值
diff = this_time-start_time
# 求期间有多少个闹铃时间间隔
n = diff // timedelta(minutes=x)
# 按要求输出结果,用strftime方法将结果解析成指定格式的字符串
res = (start_time + n*timedelta(minutes=x)).strftime("%Y-%m-%d %H:%M:%S")
print(res)