Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "fmt"
- "os"
- )
- func main() {
- var in *bufio.Reader
- var out *bufio.Writer
- in = bufio.NewReader(os.Stdin)
- out = bufio.NewWriter(os.Stdout)
- defer out.Flush()
- Solution(in, out)
- }
- func Solution(in *bufio.Reader, out *bufio.Writer) {
- slice_of_slices := make([][]string, 501)
- var n int
- fmt.Fscan(in, &n)
- for i := 0; i < n; i++ {
- var login string
- fmt.Fscan(in, &login)
- sliceLogin := slice_of_slices[len(login)]
- slice_of_slices[len(login)] = append(sliceLogin, login)
- }
- var m int
- fmt.Fscan(in, &m)
- for i := 0; i < m; i++ {
- var login string
- fmt.Fscan(in, &login)
- slice := slice_of_slices[len(login)]
- res := false
- for _, v := range slice {
- if areAlmostEqual(v, login) {
- res = true
- break
- }
- }
- if res {
- fmt.Fprintln(out, 1)
- } else {
- fmt.Fprintln(out, 0)
- }
- }
- }
- func areAlmostEqual(str1, str2 string) bool {
- if str1 == str2 {
- return true
- }
- v, f := hamming(str1, str2)
- if v == 2 && f {
- return true
- }
- return false
- }
- func hamming(s1 string, s2 string) (int, bool) {
- r1 := []rune(s1)
- r2 := []rune(s2)
- distance := 0
- distanceUpdatedLast := false
- swappable := false
- for i, v := range r1 {
- if r2[i] != v {
- distance += 1
- if distanceUpdatedLast {
- swappable = true
- }
- distanceUpdatedLast = true
- } else {
- distanceUpdatedLast = false
- }
- }
- return distance, swappable
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement