Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengoptimumkan Penyelesaian SPOJ Saya untuk Mengelakkan Tamat Masa?
Pengimbasan Input yang Lebih Pantas untuk SPOJ
Penyelesaian SPOJ anda tamat masa kerana input dan output lalai berfungsi (fmt.Scan dan fmt.Println) adalah agak perlahan. Untuk mencapai bacaan input yang lebih pantas, gunakan bufio.Scanner untuk membaca baris daripada input standard.
Mengoptimumkan Penukaran Integer
Daripada menggunakan bufio.Scanner.Text() untuk mendapatkan perwakilan teks dan kemudian menukarnya kepada integer menggunakan strconv.Atoi(), gunakan penukaran khusus berfungsi untuk mengekstrak nombor terus daripada bait mentah yang dikembalikan oleh bufio.Scanner.Bytes(). Kaedah ini mengelakkan penukaran rentetan dan peruntukan memori yang tidak perlu, meningkatkan prestasi dengan ketara.
func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
Penyelesaian Dioptimumkan Lengkap
Penyelesaian dioptimumkan berikut membaca input dengan lebih pantas dan memenuhi SPOJ keperluan had masa:
package main import ( "bufio" "fmt" "os" ) func main() { var n, k, c int scanner := bufio.NewScanner(os.Stdin) scanner.Scan() fmt.Sscanf(scanner.Text(), "%d %d", &n, &k) for ; n > 0; n-- { scanner.Scan() if toInt(scanner.Bytes())%k == 0 { c++ } } fmt.Println(c) } func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
Tambahan Nota
for scanner.Scan() { if toInt(scanner.Bytes())%k == 0 { c++ } }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Penyelesaian SPOJ Saya untuk Mengelakkan Tamat Masa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!