文章目录
- A 突发恶疾
- B Uzi 的真身
- C 时间管理大师
- D 基站建设
- E 在仙境之外
- weiwandaixu
题目地址
A 突发恶疾
- 斐波那契数列
fn = [0]*1000006
fn[0],fn[1] = 0,1
for i in range(2,1000002):
fn[i] = (fn[i-1]+fn[i-2])%998244353
n = int(input())
print(fn[n])
B Uzi 的真身
- 分析:本来想使用动态规划算法的,但是由于数据计算过大,导致超时
正确的思想:直接线性遍历字符串,分别统计字符“j”的个数,后面对于统计字符“z”和字符“h” 的个数的时候就要讲究技巧了,z = z+j , h = h+z
n = int(input())
str1 = list(input())
lenstr1 = len(str1)
j = 0
z = 0
h = 0
for i in range(lenstr1):
if str1[i] == 'j':
j+=1
if str1[i] == 'z':
z = z+j
if str1[i] == 'h':
h = z+h
h = h % 998244353
print(h)
C 时间管理大师
h = list()
m = list()
time = [[0]*60 for _ in range(24)]
n = int(input())
for i in range(n):
x,y = map(int,input().split())
h.append(x)
m.append(y)
for i in range(n):
if m[i]>=5:
time[h[i]][m[i]-5],time[h[i]][m[i]-3],time[h[i]][m[i]-1]=1,1,1
else:
if m[i]>=3:
time[h[i]][m[i]-3],time[h[i]][m[i]-1]=1,1
temp = 60+m[i]-5
time[h[i]-1][temp]=1
else:
if m[i]>=1:
time[h[i]][m[i]-1]=1
temp = 60+m[i]-5
time[h[i]-1][temp]=1
temp = 60+m[i]-3
time[h[i]-1][temp]=1
else:
temp = 60+m[i]-5
time[h[i]-1][temp]=1
temp = 60+m[i]-3
time[h[i]-1][temp]=1
temp = 60+m[i]-1
time[h[i]-1][temp]=1
a = list()
b = list()
count = 0
for i in range(2,24):
for j in range(60):
if time[i][j]==1:
count+=1
a.append(i)
b.append(j)
print(count)
for i in range(count):
print(a[i],b[i])
D 基站建设
- 对于这道题,开始的时候,想使用前缀和与差分进行计算重叠的问题,但是会发现对于相邻的两个整数无法正确区分是否要增加基站
正确的思路:转换成活动安排问题,采用元组存储(x-b,x+b)结果,使用lambda 表达式进行排序,通过活动安排问题进行安排
n = int(input())
store = list()
# 这就是一个活动安排问题,找出相容的活动的数目
for i in range(n):
x,b = map(int,input().split())
store.append((x-b,x+b))
store.sort(key = lambda x:x[1])
count = 0
end = 0
for s,e in store:
if s>end:
count+=1
end = e
if count==0:
print(1)
else:
print(count)
E 在仙境之外
- 这道题目开始的时候就在想,要是四个运算都使用上的话,就十分复杂,后面一想,答案肯定是不唯一的,所以我们可以使用简单一点的运算,所以我们可以采纳二进制的算法,按照位数进行计算,开始的时候将S 进行分解为二进制,后面将要使用的x 的第一个x自己除以自己,得到一,然后一直累加自己,当S 的对应的二进制位数匹配的时候,就加到去。
整个的一个过程,我们采用类似元组[(i,j,k,’ ')]来储存结果
n,S = map(int,input().split())
store = [0]*70
ans = 0
temp = S
while(S!=0):
if S%2!=0:
store[ans]=1
ans+=1
S=S//2
A = list(map(int,input().split()))
S = temp
result = list()
count = 0
A[0] = 1
result.append((1,1,1,'/'))
count = 1
if S%2==1:
result.append((n+1,n+1,1,'+'))
count+=1
for i in range(1,ans):
result.append((1,1,1,'+'))
count+=1
if store[i]==1:
result.append((n+1,n+1,1,'+'))
count+=1
print(count)
for i,j,k,z in result:
print(i,j,k,z)
weiwandaixu
- 以后再写咯