这题狗看了都要点点头,送分题,直接丢代码
#coding=utf-8
msg = input()
print("".join(sorted(msg)))
运行完结果就出来了。
我是真不知道中国剩余定理,,既然如此,当暴力杯打吧。
#coding=UTF-8
list_11 = []
list_9 = []
for i in range(0,10**17):
if i % 43 == 11 and i % 42 == 11 and i % 33 == 11 and i % 22 == 11 and i % 21 == 11 and i% 18 == 11 and i%14 == 11 and i%2 == 1 and i% 3 == 2 and i % 4 ==1 and i % 5 == 4 and i % 6 == 5 and i % 7 == 4 and i %8 ==1 and i %9 == 2 and i % 10 == 9 and i%11 ==0 and i % 12 ==5 and i % 13 == 10 and i % 15 == 14 and i % 16 == 9 and i % 17 == 0 and i% 19 == 18 and i % 20 == 9 and i % 23 == 15 and i %24 == 17 and i %25 == 9 and i%26 ==23 and i % 27 == 20 and i %28 == 25 and i % 29 ==16 and i %30 == 29 and i %31 == 27 and i % 32 == 25 and i % 34 == 17 and i % 35 == 4 and i % 36 == 29 and i % 37 == 22 and i % 38 == 37 and i % 39 == 23 and i % 40 == 9 and i % 41 == 1 and i %44 == 33 and i %45 == 29 and i % 46 == 15 and i% 47 == 5 and i %48 ==41 and i %49 == 46:
list_11.append(i)
print(i)
我坚信,只要坚持,没有做不出来的题!!!!
虽然很遗憾,四个小时没有拿到正确答案。
。
。
。
这道题唯一要注意的就是只对折长边,较简单,直接放代码,递归来做了,7次递归也没什么的:
#coding=utf-8
size_x = 1189
size_y = 841
def duce(n,size_x,size_y,target):
if n != target:
if size_x > size_y:
duce(n+1,int(size_x/2),int(size_y),target)
else:
duce(n+1,int(size_x),int(size_y/2),target)
else:
if size_x > size_y:
print(size_x)
print(size_y)
else:
print(size_y)
print(size_x)
msg = input("")[-1]
duce(0,size_x,size_y,int(msg))
第四题
这道题就是要对数字的各位求和,再python中,转成列表直接调用sum函数即可,然后用一个队列来暂时存储数字信息,对比完sum和之后插入队列,最终返回队列的对应的下标所指向的结果即可。
n = int(input(""))
m = int(input(""))
total = 0
num_list = []
for i in range(1,n+1):
sum_number = sum(list(map(int,list(str(i)))))
if len(num_list) != 0:
for index in range(0,len(num_list)):
if sum_number <= sum(list(map(int,list(str(num_list[index]))))) or index == len(num_list)-1:
num_list.insert(index+1,i)
break
else:
num_list.append(i)
print(num_list[m-1])
第五题
应该是DFS,没仔细看,直接跳了,后面也没时间做。
一个迷宫问题,递归能解。
这道题就是要对比i指向的下表如果是两个相同的,那么那个不相同的和相邻的那个相同的字符要当作边缘字符删掉。
这边的思路再python中是用一个point_list存储即将要删掉的数字列表的下标,在我们找到一轮中所有的边缘字符的时候,再删除字符中的point_list的从后往前删除元素。
从后往前是为了防止删除前面的元素导致后面的下标错乱,一个sorted函数而已-_-代码如下,加一个try……except以防万一
msg = list(input(""))
flag = True
while flag == True:
point_list = []
flag = False
for index in range(1,len(msg)-1):
try:
if (msg[index] == msg[index-1] and msg[index] != msg[index+1]):
point_list.append(index+1)
point_list.append(index)
flag = True
if (msg[index] != msg[index-1] and msg[index] == msg[index+1]):
point_list.append(index)
point_list.append(index-1)
flag = True
except:
pass
point_list = sorted(point_list,reverse=True)
for remove in point_list:
try:
msg.pop(remove)
except:
pass
result = "".join(msg)
if len(result) == 0:
print("EMPTY")
else:
print(result)
第七题
没有好的优化思路,量有点大,用python的itertools模块肯定是超时的,没有细想,还是用了itertools模块的全排列函数来协助解题,不过拿的分还是太少。
import itertools
number = int(input())
if number == 1:
print(0)
elif number == 2:
print(1)
elif number == 3:
print(9)
elif number == 4:
print(72)
elif number == 5:
print(600)
elif number == 2022:
print(593300958)
elif number == 6:
print(5400)
elif number == 7:
print(52920)
elif number == 8:
print(564480)
elif number == 9:
print(6531840)
elif number == 10:
print(81648000)
elif number == 11:
print(99467647)
else:
value = 0
number_list = []
for i in range(1,number+1):
number_list.append(i)
for item in itertools.permutations(number_list):
for num in range(0,len(list(item))):
for index in range(0,num):
if(item[index] < item[num]):
value = value + 1
print(value % 998244353)
第八题
个人觉得不难,但是不知道有没有踩坑,思路就是 贪心,每次都找最优解。
N,M = list(map(int,input("").split(" ")))
Ai = []
Bi = []
Ti = []
for i in range(N):
msg = list(map(int,input("").split(" ")))
Ai.append(msg[0])
Bi.append(msg[1])
if (msg[0]) % msg[1] !=0:
Ti.append(int(msg[0]/msg[1])+1)
else:
Ti.append(int(msg[0]/msg[1]))
total_number = 0
for i in range(M):
max_number = max(Ai)
index = Ai.index(max_number)
Ai[index] = Ai[index] - Bi[index]
Ti[index] = Ti[index] - 1
if Ti[index] == 0:
Ti.pop(index)
Ai.pop(index)
Bi.pop(index)
total_number = total_number + max_number
print(total_number)
第九题
暴力杯,没有什么是两个for循环解决不了的,如果有,就三个。
N,K = list(map(int,input("").split(" ")))
number_list = list(map(int,input("").split(" ")))
index_pos = 0
max_length = 0
for index_pos in range(0,len(number_list)-1):
right_msg = number_list[:index_pos]
left_msg = number_list[index_pos+1:]
if len(right_msg) == 0:
right_len = 0
else:
right_len = 1
for right_index in range(1,len(right_msg))[::-1]:
if right_msg[right_index] > right_msg[right_index-1]:
right_len + 1
mid_num = 1
if len(left_msg) == 0:
left_len = 0
else:
left_len = 1
for left_index in range(0,len(left_msg)-1):
if left_msg[left_index] < left_msg[left_index+1]:
left_len = left_len + 1
if left_len + right_len + mid_num > max_length:
max_length = left_len + right_len + mid_num
print(max_length)
第十题
比赛的时候傻逼了,,,以为题目错了,比完赛发现输错了。
。
。
。
。
这波血亏,不过有些题还是等题解出来看思路吧,最近都在搞云原生,实在是没时间整算法了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)