hello, 博客园

在注册了博客园帐号不知道多久之后,我终于开始写自己的第一篇博客了,因为我终于意识到,我的记忆力真的跟我自己想象中差别太大了,很多东西看过去可能几周甚至几天的时间就忘记了。
今天要写的是关于Golang的,在某个OJ刷题的时候发现,自己写的golang代码几乎每一次都超时了,于是每次都不得不换C重写,起初以为是golang的io效率太低了,后来发现别人提交的golang代码甚至可以运行的比C更快,刚好这个OJ支持查看别人提交的代码,于是有机会查看了一下大神们的代码,才发现自己对golang的了解实在浅薄,golang的学习任重而道远。
在一个非常简单的问题中(由于过于简单就不写描述了),我的实现代码是这样的:

package main

import "fmt"

func main(){
    var arrlen, numquery int
    fmt.Scanf("%d", &arrlen)
    fmt.Scanf("%d", &numquery)
    arr := make([]int, arrlen)
    for i := range arr{
        fmt.Scanf("%d", &arr[i])
    }
    for ; numquery > 0; numquery--{
        var op int
        fmt.Scanf("%d", &op)
        if op == 0{
            var l, r int
            fmt.Scanf("%d", &l)
            fmt.Scanf("%d", &r)
            if arr[r-1] == 0{
                fmt.Println("EVEN")
            }else{
                fmt.Println("ODD")
            }
        }else if op == 1{
            var x int
            fmt.Scanf("%d", &x)
            arr[x-1] = 1-arr[x-1]
        }
    }
}

代码的逻辑没有问题,但是几乎每一个测试用例都超时超过100%,大神的代码是这样的

package main
 
import (
	"bufio"
	"io/ioutil"
	"os"
)
 
var t byte
var inp []byte
var loc, max int
 
func main() {
	var i int64
	read := bufio.NewReader(os.Stdin)
	inp, _ = ioutil.ReadAll(read)
	max = len(inp)
	write := bufio.NewWriter(os.Stdout)
	n := scanInt()
	q := scanInt()
	arr := make([]int64, n)
	for i = 0; i < n; i++ {
		arr[i] = scanInt()
	}
	for q > 0 {
		c := scanInt()
		if c == 0 {
			scanInt()
			r := scanInt()
			if arr[r-1] == 0 {
				write.WriteString("EVEN\n")
			} else {
				write.WriteString("ODD\n")
			}
		} else {
			x := scanInt()
			if arr[x-1] == 1 {
				arr[x-1] = 0
			} else {
				arr[x-1] = 1
			}
		}
		q--
	}
	write.Flush()
}
 
func scanInt() (res int64) {
	t = inp[loc]
	for ; t < 48 || t > 57; t = inp[loc] {
		loc++
		if loc >= max {
			break
		}
	}
	for ; t >= 48 && t <= 57; t = inp[loc] {
		res = (res << 1) + (res << 3) + int64(t-48)
		loc++
		if loc >= max {
			break
		}
	}
	return
}

把本应成为瓶颈的io加上缓冲,效率提高了90%

posted @ 2019-04-02 14:47  SolskGaer  阅读(74)  评论(0)    收藏  举报