Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Saya Boleh Mengoptimumkan Penyelesaian SPOJ Saya untuk Mengelakkan Tamat Masa?

Bagaimanakah Saya Boleh Mengoptimumkan Penyelesaian SPOJ Saya untuk Mengelakkan Tamat Masa?

DDD
DDDasal
2024-12-28 11:18:24470semak imbas

How Can I Optimize My SPOJ Solution to Avoid Timeouts?

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

  • Penyelesaian menganggap input yang sah dengan sekurang-kurangnya n baris selepas pengepala.
  • Untuk input tertutup selepas n 1 baris, gelung dipermudah boleh digunakan:
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!

Kenyataan:
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