如果你特别迷恋一个人,那么你一定配不上他!

ACM部分语言快速IO

部分语言的快速 IO

部分题目输入数据量过大,需要使用更高效读入方式才能通过。以下按照热身赛 B 题的需要列出部分语言的快速 IO。

其他语言的 IO 可以参考题目页提交框右上角的“帮助-各种语言程序样例”。

C++

C++ 中的流输入输出默认会与 C 风格的标准输入输出同步,导致性能不佳。同时  cin  和  cout  也存在同步, cin  读取数据前会先清空  cout  的输出缓冲区。可以在程序最开始使用如下语句取消这两种同步。但应注意之后无法再混用两种输入输出方式。


	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);


Java

static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer tokenizer = null; static String next(){ while (tokenizer == null || !tokenizer.hasMoreTokens()){ try{ tokenizer = new StringTokenizer(reader.readLine()); } catch (IOException e){ throw new RuntimeException(e); } } return tokenizer.nextToken(); } static int nextInt(){ return Integer.parseInt(next()); }

Python3

Python2 类似。

Python3 使用  input()  或  sys.stdin.readline()  均可。


	cas = int(input()) for casi in range(cas):  n, m = list(map(int, input().split()))  a = list(map(int, input().split()))

Go

与 C++ 类似, bufio  会将输入预先读入到缓冲区,因此不能与  fmt.Scan  混用。


	func ReadLine(reader *bufio.Reader) string {  line, _ := reader.ReadString('\n')  return strings.TrimRight(line, "\n") }  func ReadInt(reader *bufio.Reader) int {  num, _ := strconv.Atoi(ReadLine(reader))  return num }  func ReadArray(reader *bufio.Reader) []int {  line := ReadLine(reader);  strs := strings.Split(line, " ")  nums := make([]int, len(strs))  for i, s := range strs {  nums[i], _ = strconv.Atoi(s)  }  return nums }   reader := bufio.NewReader(os.Stdin)

PHP


	$T = fgets(STDIN);
 for($t=0;$t<$T;$t++){  
    list($n, $m) = explode(' ', fgets(STDIN));
    $a = explode(' ', fgets(STDIN));

常见错误和技巧

  1. 本地测试时建议采用命令行文件重定向方式输入测试数据,以尽量和评测环境对齐。手工按行输入测试数据时,IO 的 buffer 无法读取后续数据,行为会与实际评测存在差异。
  2. 部分题目可以通过对一部分输入数据进行特判得出答案,此时应注意继续将当前这一组输入读取完毕。例如热身赛的 B 题,m 为 0 时答案必为 0,此时应将后续的 n 个整数也读取完毕,否则下一次循环所读取到的 n 和 m 实际为本组数据的 a1 和 a2。
  3. 注意题目中各种量的上下界,估计最终结果和算法中间结果的大小,使用合适的类型存储。
  4. 如果发生运行超时的错误,在排除死循环之后,可以根据题目中的数据范围生成极限数据,在本地进行测试。
标签ACM 编程技术

最新评论