笔试编程题输入输出防卡常小技巧(Go/Python)
如果写编程题感觉时间复杂度是正确的(1e7 稳,1e8 看情况)但是超时,那么可以尝试使用更快的输入输出方式,这里搬一点大佬们的代码
Go
来源:灵神的 GitHub(看最开头那几行就够了)
https://github.com/EndlessCheng/codeforces-go/blob/master/copypasta/io.go
省流:用 bufio 快
// bufio.NewWriter
// 相比 fmt.Println,每减少 1e5 次 Flush 可以加速约 200ms(Codeforces/AtCoder)
// 也就是说,对于 1e4 及以下量级的输出,加不加 buffer 都一样,所以直接用 fmt.Println 输出即可
// 注:大多数 CF 题目都是 T <= 1e4 的
// 附对比:
// 405ms https://codeforces.com/contest/1603/submission/135520593
// 187ms https://codeforces.com/contest/1603/submission/134450945
// NOTE: 调用 Fprintln 打印 int(0) 1e6 次的耗时为 77ms https://codeforces.com/contest/1603/submission/169796327
// NOTE: 调用 Fprintln 打印 int(1e9) 1e6 次的耗时为 155ms https://codeforces.com/contest/1603/submission/169796385
// 带有 IO 缓冲区的输入输出,适用于绝大多数题目
// 相比 fmt.Scan,每读入 1e5 个 int 可以加速约 1300ms(Codeforces/AtCoder)
// 对比:(3e4 个 int)
// 623ms https://codeforces.com/problemset/submission/981/124239306
// 233ms https://codeforces.com/problemset/submission/981/124237530
func bufferIO() {
in := bufio.NewReader(os.Stdin)
out := bufio.NewWriter(os.Stdout)
defer out.Flush()
var n int
Fscan(in, &n) // 如果行数未知,可以根据 Fscan 的第一个返回值是否为正来决定
Fprintln(out, n)
}
注:似乎在考试要求还是什么地方看到说不让用 os 包,但是不用的话会很慢很慢,可以自己权衡一下,反正我笔试用了也能成功提交
Python
来源:羊神的牛客比赛提交代码
https://ac.nowcoder.com/acm/contest/view-submission?submissionId=76395472
省流:input = lambda: sys.stdin.readline().strip()
import sys
# 主要就是下面这一行
input = lambda: sys.stdin.readline().strip()
# 以下函数读入数据时按需使用
def I():
return input()
def II():
return int(input())
def MII():
return map(int, input().split())
def LI():
return input().split()
def LII():
return list(map(int, input().split()))
def LFI():
return list(map(float, input().split()))
def GMI():
return map(lambda x: int(x) - 1, input().split())
def LGMI():
return list(map(lambda x: int(x) - 1, input().split()))
注:解释器选 PyPy3,比 Python3 快
哪里没写对还请大家指正 and 补充!
#笔试#
