Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Kami Boleh Mengoptimumkan Pengimbasan Input dalam Go untuk Mengelakkan Tamat Masa dalam Pengaturcaraan Kompetitif?

Bagaimanakah Kami Boleh Mengoptimumkan Pengimbasan Input dalam Go untuk Mengelakkan Tamat Masa dalam Pengaturcaraan Kompetitif?

Susan Sarandon
Lepaskan: 2024-12-25 21:56:15
asal
692 orang telah melayarinya

How Can We Optimize Input Scanning in Go to Avoid Timeouts in Competitive Programming?

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan