Pengimbasan Input yang Lebih Pantas untuk Prestasi Kod Dipertingkat
Program yang disediakan bertujuan untuk menyelesaikan cabaran pengekodan daripada SPOJ. Walau bagaimanapun, proses pengimbasan input nampaknya menyebabkan isu tamat masa. Walaupun menggunakan bufio untuk bacaan input yang lebih pantas, kod ini masih menghadapi masalah ini.
Untuk menangani perkara ini, mari kita terokai dua teknik pengoptimuman:
1. Menggunakan bufio.Scanner
Daripada menggunakan fmt.Fscan untuk bacaan input baris demi baris, kami boleh menggunakan bufio.Scanner. Pendekatan ini menyelaraskan proses dengan memanfaatkan kaedah Bytes(), yang mengembalikan bait mentah secara langsung dan bukannya menukarnya kepada rentetan.
2. Fungsi Penukaran Integer Tersuai
Untuk meningkatkan lagi kelajuan, kami boleh memperkenalkan fungsi penukar khusus, toInt(), yang mengekstrak integer dengan cekap daripada bait mentah yang diperoleh daripada bufio.Scanner. Fungsi ini secara langsung menterjemah urutan bait yang mewakili nombor perpuluhan kepada integer, menghapuskan overhed penukaran rentetan.
Kod dikemas kini yang menggabungkan pengoptimuman ini adalah seperti berikut:
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 }
Dengan menggabungkan bufio .Pengimbas dengan fungsi custom toInt(), kami meningkatkan kecekapan bacaan dan penukaran input dengan ketara. Akibatnya, penyelesaian yang dioptimumkan ini dijangka berprestasi lebih pantas daripada versi asal, menyelesaikan isu tamat masa yang dihadapi sebelum ini.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengoptimumkan Pengimbasan Input dalam Go untuk Mengelakkan Tamat Masa dalam Pengaturcaraan Kompetitif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!