笔试编程题输入输出防卡常小技巧(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 补充!

#笔试#
全部评论

相关推荐

评论
1
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务