前言:2023年的天梯赛难度是近年来最难的,L1有些难度、L2难度大增、L3近年最难。短短3小时内,该如何获得尽可能高的分?这里提供了一系列技巧,重点会加粗。
参考资料:2023年天梯赛的国家奖切线是250/220/175;如果采用近两年的新切线算法(即根据175分及以上的1:3:6人数比例颁奖),国家奖切线是226/193/175。
接下来直接上技巧与代码,全文共23386字,配合右边的目录阅读体验更佳~
如果这篇文章被自动设置为VIP可见或者付费,请尽快联系我。
L1-基础级(100分)
题目偏难,这一年挖坑的题变成2道了(参考L1-6和L1-7),很容易写错。
但L1部分基本上还是涵盖了近年来L1的所有考点:
简单输出、顺序语句、分支语句、循环语句、字符串处理、较复杂模拟。
建议学习set、unordered_set、map、unordered_map,对部分题目有显著效果。
L1必有至少一道题目挖坑。(例如审题、一些边界问题、暴力做法超时等)
L1的绝大多数题目,用任何语言写出正解不会超时。
C++选手的优秀手速(自己可以尝试训练到这个标准,可以给L2和L3多出很多做题时间):
获奖过天梯赛的选手:达到95分:30分钟。达到100分:40分钟。
未获奖过天梯赛的选手,在50-60分钟内得到90-95分就很不错;熟练后可按上述要求练习手速。
L1-1 最好的文档(5分)
原题链接:L1-089 最好的文档 - 团体程序设计天梯赛-练习集
思路:直接输出字符串即可。
提示:这道题可以存你的模板/头文件,方便直接复制。
C++代码:L1-089 最好的文档_好代码本身就是最好的文档-CSDN博客
Python代码:
from heapq import heappush,heappop #优先队列
from bisect import bisect,bisect_left #二分,类似C++的lower_bound
from math import sqrt,ceil,floor #开根号,向上取整,向下取整
from collections import deque #双端队列,C++也有
import sys #这个模块很有用
import time #time.time()相减可以算运行时间,在蓝桥杯赛制下有用 检测是否超时
sys.setrecursionlimit(1000010) #手动设置递归深度,解除递归限制 默认递归深度999
sys.set_int_max_str_digits(1000010) #设置数字最大位数(更高的高精度)
inpu = sys.stdin.readline #快读,字符串末尾带换行,用strip()方法可以去换行
prin = sys.stdout.write #快写,不会自带换行,要手动换行
#上面是模板,可以复制到其他题目
print("Good code is its own best documentation.")
#C++模板,记得在PTA上的Python3语言环境同时按下Ctrl+/,解除注释,然后切换到C++语言
#天梯赛可以用不同的语言交题目(例如一道题用Python3,另一道题用C++)
# #include<bits/stdc++.h>
# using namespace std;
# typedef long long ll;
# #define append push_back
# #define print printf
# int main()
# {
# ios::sync_with_stdio(false);
# cin.tie(0);
# cout.tie(0);
# return 0;
# }
L1-2 什么是机器学习(5分)
原题链接:L1-090 什么是机器学习 - 团体程序设计天梯赛-练习集
思路:直接分行输出4种结果即可。
提示:无。
C++代码:L1-090 什么是机器学习-CSDN博客
Python代码:
from collections import deque
from math import sqrt,ceil,floor
import sys
sys.setrecursionlimit(1000010)
sys.set_int_max_str_digits(1000010)
inpu = sys.stdin.readline
prin = sys.stdout.write
a,b = map(int,input().split()) #用map来将分割后字符串的存到对应的数字里面
print(a+b-16)
print(a+b-3)
print(a+b-1)
print(a+b)
L1-3 程序员买包子(10分)
原题链接:L1-091 程序员买包子 - 团体程序设计天梯赛-练习集
思路:用if-else语句判断每个情况,题目的输出格式已经提示了。
提示:无。
C++代码:L1-091 程序员买包子 分数 10 - Frodnx - 博客园
Python代码:
from heapq import heappush,heappop
from bisect import bisect,bisect_left
from math import sqrt,ceil,floor
from collections import deque
import sys
import time
sys.setrecursionlimit(1000010)
sys.set_int_max_str_digits(1000010)
inpu = sys.stdin.readline
prin = sys.stdout.write
nn,x,mm,kk = input().split()
n,m,k = int(nn),int(mm),int(kk)
#输出字符串用%s,和C语言一样
if k == n:
print("mei you mai %s de"%x)
elif k == m:
print("kan dao le mai %s de"%x)
else:
print("wang le zhao mai %s de"%x)
L1-4 进化论(10分)
原题链接:L1-092 进化论 - 团体程序设计天梯赛-练习集
思路:用if-else语句判断每个情况,题目的输出格式已经提示了。
提示:无。
C++代码:pta L1-092 进化论_l1-092python-CSDN博客
Python代码:
from collections import deque
from math import sqrt,ceil,floor
import sys
sys.setrecursionlimit(1000010)
sys.set_int_max_str_digits(1000010)
inpu = sys.stdin.readline
prin = sys.stdout.write
n=int(input())
for i in range(n):
#直接输入输出就行
a,b,c = map(int,input().split())
if c == a*b:
print("Lv Yan")
elif c == a+b:
print("Tu Dou")
else:
print("zhe du shi sha ya!")
L1-5 猜帽子游戏(15分)
原题链接:L1-093 猜帽子游戏 - 团体程序设计天梯赛-练习集
思路:输入正确答案后,用for循环读入每组“猜”的情况,之后根据情况输出Da Jiang!!!或者Ai Ya,建议直接从题目复制,自己手打容易打错。
提示:1.只要有一个不正确,就是Ai Ya;
2.如果所有人都弃权(即全0),也是Ai Ya;
3.只要有人猜对,且其他人弃权或无人猜错,就是Da Jiang!!!。
C++代码:PTA L1-093 猜帽子游戏 (15 分)-CSDN博客
Python代码:
from heapq import heappush,heappop
from bisect import bisect,bisect_left
from math import sqrt,ceil,floor
from collections import deque
import sys
import time
sys.setrecursionlimit(1000010)
sys.set_int_max_str_digits(1000010)
inpu = sys.stdin.readline #快读
prin = sys.stdout.write #快写
#inpu是快读,不是打错了,后面题目同理
n = int(inpu())
a = list(map(int,inpu().split())) #根据读入的行转为整型列表(类似C++的数组)
m = int(inpu())
for i in range(m):
b = list(map(int,inpu().split()))
dui = 1 #假设所有人猜对
f0 = 0 #非0,就是是否有人猜
for j in range(n):
if b[j] != 0:
f0 = 1 #有人猜,排除所有人弃权的情况
if b[j] != a[j]: #这里的条件嵌套于 b[j] != 0 内,即这个人不是弃权的
dui = 0
if dui == 1 and f0 == 1: #如果有人没弃权,猜的人全猜对,就输出大奖
print("Da Jiang!!!")
else:
print("Ai Ya")
L1-6 剪切粘贴 (15分)
原题链接:L1-094 剪切粘贴 - 团体程序设计天梯赛-练习集
思路:对于每个操作,有4个参数,分离字符串的起始下标,分离字符串的结束下标,要查找的两个字符串。如果能找到一种两个字符串相邻(不能有重叠)的情况,就把分离的字符串塞入第一次出现的相邻字符串之间的那个位置;否则塞入末尾。
提示:1.题目每组操作提供的下标从1开始,记得转从0开始的下标,或者进行其他特殊处理。
2.必须先把要复制的字符串分离出来再寻找对应位置;假设有一组操作:1 3 ab c,而原字符串是abcdeabc,那么先把前面的abc分离出来,得到字符串deabc,找到的第一个位置是de后面的abc,之后字符串变成deababcc。
3.找出来的位置不能重叠。假设有一组操作:9 10 hav ave,原字符串是 Ihaveanapple,此时不应该记录位置(因为have的hav和ave是重叠的)。正确的做法是找不到相邻的字符串,把分离的字符串塞入字符串末尾。
4.如果有选手使用两个字符串分开找的方法,记住一定要找到第一次出现的相邻字符串的那个位置。假设有一组操作:1 2 e f,原字符串abessfssfsesefsesfefe,则设计的算法要将分离的字符串放入第一次出现的字符串(即上述字符串加粗的位置)的中间。输入样例的最后一组操作就考虑了这个情况。
5.C++选手请灵活使用substr和find的函数,解决L1的字符串问题非常有用!可以参考下方的文章。如果学有余力,可以学习这篇文章的其他STL字符串操作函数。Python选手也尝试掌握find方法、replace方法和切片的熟练应用。注意Python的标准str类型不能直接修改字符串的一部分(哪怕只修改一个字母也不行),只能重新切片并组合。
C++代码:PTA L1-094 剪切粘贴 (超简版——灵活运用string模板库里的函数(也就练习了半坤年))_剪切粘贴pta-CSDN博客
Python代码:
from heapq import heappush,heappop
from bisect import bisect,bisect_left
from math import sqrt,ceil,floor
from collections import deque
import sys
import time
sys.setrecursionlimit(1000010)
sys.set_int_max_str_digits(1000010)
inpu

最低0.47元/天 解锁文章
1625

被折叠的 条评论
为什么被折叠?



