1.排列字母
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝要把一个字符串中的字母按其在字母表中的顺序排列。
例如,LANQIAO 排列后为 AAILNOQ。
又如,GOODGOODSTUDYDAYDAYUP 排列后为AADDDDDGGOOOOPSTUUYYY。
请问对于以下字符串,排列之后字符串是什么?
WHERETHEREISAWILLTHEREISAWAY
运行限制
最大运行时间:1s
最大运行内存: 512M
string = input()
dict = {}
for s in string:
if s not in dict.keys():
dict[s]=1
else:
dict[s]+=1
dict2 = sorted(dict.items())
# print(dict2)
for i in range(len(dict2)):
for j in range(dict2[i][1]):
print(dict2[i][0],end="")
s = str(input())#这个快很多
in2 = list(s)
in2.sort()
for i in in2:
print(i,end="")
2.寻找整数 ×
问题描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
有一个不超过 10^{17}1017
的正整数 nn,知道这个数除以 2 至 49 后的余数如下表所示,求这个正整数最小是 多少。
图片描述
运行限制
最大运行时间:1s
最大运行内存: 512M
3.纸张尺寸
问题描述
在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm \times× 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm \times× 594mm, 在对折 的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。
输入纸张的名称, 请输出纸张的大小。
输入格式
输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。
输出格式
输出两行,每行包含一个整数,依次表示长边和短边的长度。
样例输入1
A0
copy
样例输出1
1189
841
copy
样例输入 2
A1
copy
样例输出 2
841
594
copy
运行限制
最大运行时间:1s
最大运行内存: 512M
ask = input()
a = int(ask[1])
# print(a)
l = 1189
w = 841
if a==0:
print(l)
print(w)
else:
for i in range(a):
tmp = l//2
l = max(tmp,w)
w = min(tmp,w)
print(l)
print(w)
4.数位排序
问题描述
小蓝对一个数的数位之和很感兴趣, 今天他要按照数位之和给数排序。当 两个数各个数位之和不同时, 将数位和较小的排在前面, 当数位之和相等时, 将数值小的排在前面。
例如, 2022 排在 409 前面, 因为 2022 的数位之和是 6, 小于 409 的数位 之和 13 。
又如, 6 排在 2022 前面, 因为它们的数位之和相同, 而 6 小于 2022 。
给定正整数 n, mn,m, 请问对 1 到 nn 采用这种方法排序时, 排在第 mm 个的元 素是多少?
输入格式
输入第一行包含一个正整数 nn 。
第二行包含一个正整数 mm 。
输出格式
输出一行包含一个整数, 表示答案。
样例输入
13
5
copy
样例输出
3
copy
样例说明
1 到 13 的排序为: 1,10,2,11,3,12,4,13,5,6,7,8,91,10,2,11,3,12,4,13,5,6,7,8,9 。第 5 个数为 3 。
评测用例规模与约定
对于 30 \%30% 的评测用例, 1 \leq m \leq n \leq 3001≤m≤n≤300 。
对于 50 \%50% 的评测用例, 1 \leq m \leq n \leq 10001≤m≤n≤1000 。
对于所有评测用例, 1 \leq m \leq n \leq 10^{6}1≤m≤n≤10
6
。
运行限制
最大运行时间:3s
最大运行内存: 512M
n = int(input())
m = int(input())
li = list(range(1,n+1))
li.sort(key=lambda x:sum(int(i) for i in str(x)))
print(li[m-1])
5.蜂巢 ×
没搞懂这个题目的考察点,模拟?但是实际的模拟又很简单。
6.消除游戏 ×看已交的全过题解
这个还好,几乎一半超时
问题描述
在一个字符串 SS 中, 如果 S_{i}=S_{i-1}S
i
=S
i−1
且 S_{i} \neq S_{i+1}S
i
=S
i+1
, 则称 S_{i}S
i
和 S_{i+1}S
i+1
为边缘 字符。如果 S_{i} \neq S_{i-1}S
i
=S
i−1
且 S_{i}=S_{i+1}S
i
=S
i+1
, 则 S_{i-1}S
i−1
和 S_{i}S
i
也称为边缘字符。其它的字符 都不是边缘字符。
对于一个给定的串 SS, 一次操作可以一次性删除该串中的所有边缘字符 (操作后可能产生新的边缘字符)。
请问经过 2^{64}2
64
次操作后, 字符串 SS 变成了怎样的字符串, 如果结果为空则 输出 EMPTY。
输入格式
输入一行包含一个字符串 SS。
输出格式
输出一行包含一个字符串表示答案,如果结果为空则输出 EMPTY。
样例输入 1
edda
copy
样例输出 1
EMPTY
copy
样例输入 2
sdfhhhhcvhhxcxnnnnshh
copy
样例输出 2
s
copy
评测用例规模与约定
对于 25 \%25% 的评测用例, |S| \leq 10^{3}∣S∣≤10
3
, 其中 |S|∣S∣ 表示 SS 的长度;
对于 50 \%50% 的评测用例, |S| \leq 10^{4}∣S∣≤10
4
;
对于 75 \%75% 的评测用例, |S| \leq 10^{5}∣S∣≤10
5
;
对于所有评测用例, |S| \leq 10^{6}, S∣S∣≤10
6
,S 中仅含小写字母。
运行限制
最大运行时间:5s
最大运行内存: 512M
s = input()
S = s
while True:
b = len(S)
vis = [0]*b
for i in range(1,len(S)-1):
if(S[i]==S[i+1])and (S[i-1]!=S[i]):
vis[i-1]=vis[i]=1
if(S[i-1]==S[i])and(S[i]!=S[i+1]):
vis[i]=vis[i+1]=1
stmp=[]
for i in range(len(S)):
if vis[i]==0:
stmp.append(S[i])
if len(stmp)==len(S):
print("".join(S))
break
if (len(stmp))==0:
print("EMPTY")
break
S = stmp
7.全排列的价值
发现数据中的巧妙
问题描述
对于一个排列 A=\left(a_{1}, a_{2}, \cdots, a_{n}\right)A=(a
1
,a
2
,⋯,a
n
), 定义价值 c_{i}c
i
为 a_{1}a
1
至 a_{i-1}a
i−1
中小于 a_{i}a
i
的数 的个数, 即 c_{i}=\mid\left\{a_{j} \mid j<i, a_{j}<a_{i}\right\} |_{\text {。 }}c
i
=∣{a
j
∣j<i,a
j
<a
i
}∣
。
定义 AA 的价值为 \sum_{i=1}^{n} c_{i}∑
i=1
n
c
i
。
给定 nn, 求 1 至 nn 的全排列中所有排列的价值之和。
输入格式
输入一行包含一个整数 nn 。
输出格式
输出一行包含一个整数表示答案, 由于所有排列的价值之和可能很大, 请 输出这个数除以 998244353 的余数。
样例输入 1
3
copy
样例输出 1
9
copy
样例输入 2
2022
copy
样例输出 2
593300958
copy
样例说明
1 至 3 构成的所有排列的价值如下:
\begin{aligned} &(1,2,3): 0+1+2=3 \\ &(1,3,2): 0+1+1=2 \\ &(2,1,3): 0+0+2=2 \\ &(2,3,1): 0+1+0=1 \\ &(3,1,2): 0+0+1=1 \\ &(3,2,1): 0+0+0=0 \end{aligned}
(1,2,3):0+1+2=3
(1,3,2):0+1+1=2
(2,1,3):0+0+2=2
(2,3,1):0+1+0=1
(3,1,2):0+0+1=1
(3,2,1):0+0+0=0
故总和为 3+2+2+1+1=93+2+2+1+1=9 。
评测用例规模与约定
对于 40 \%40% 的评测用例, n \leq 20n≤20;
对于 70 \%70% 的评测用例, n \leq 5000n≤5000;
对于所有评测用例, 2 \leq n \leq 10^{6}2≤n≤10
6
。
运行限制
最大运行时间:1s
最大运行内存: 512M
n = int(input())
s = n*(n-1)/4
for i in range(1,n+1):
s*= i
s %=998244353
print(int(s))
8.技能提升×
这个有点像那个背包问题,有趣,有意思
是不是动态规划,之后多写几个,有趣
居然是二分,之后再次回顾
9.最长不下降序列×
这个好像是动态规划,值得回顾。
10.最优清零方案
好熟悉,好像cf写过的简单题。