| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | 
							- package main
 
- import (
 
- 	"bufio"
 
- 	"fmt"
 
- 	"os"
 
- 	"strconv"
 
- )
 
- func readInt(s *bufio.Scanner) int {
 
- 	s.Scan()
 
- 	i, _ := strconv.ParseInt(s.Text(), 10, 32)
 
- 	return int(i)
 
- }
 
- func readStr(s *bufio.Scanner) string {
 
- 	s.Scan()
 
- 	return s.Text()
 
- }
 
- func leastSwitch(scanner *bufio.Scanner) []int {
 
- 	caseCnt := readInt(scanner)
 
- 	answer := make([]int, caseCnt)
 
- 	for i := 0; i < caseCnt; i++ {
 
- 		engineCnt := readInt(scanner)
 
- 		for j := 0; j < engineCnt; j++ {
 
- 			readStr(scanner)
 
- 		}
 
- 		queryCnt := readInt(scanner)
 
- 		if queryCnt == 0 {
 
- 			answer = append(answer, 0)
 
- 			continue // Go to next case
 
- 		}
 
- 		querySet := make(map[string]bool) // A set stores current queries
 
- 		for j := 0; j < queryCnt; j++ {
 
- 			engine := readStr(scanner)
 
- 			if _, ok := querySet[engine]; !ok {
 
- 				if len(querySet) == engineCnt-1 {
 
- 					querySet = make(map[string]bool)
 
- 					answer[i]++
 
- 				}
 
- 				querySet[engine] = true
 
- 			}
 
- 		}
 
- 	}
 
- 	return answer
 
- }
 
- func main() {
 
- 	inputFiles := []string{"A-small-practice.in", "A-large-practice.in", "test.in"}
 
- 	outputFiles := []string{"result-small.out", "result-large.out", "test.out"}
 
- 	const (
 
- 		small = iota
 
- 		large
 
- 		test
 
- 	)
 
- 	fileType := large
 
- 	fin, _ := os.Open(inputFiles[fileType])
 
- 	defer fin.Close()
 
- 	scanner := bufio.NewScanner(fin)
 
- 	answer := leastSwitch(scanner)
 
- 	fout, _ := os.Create(outputFiles[fileType])
 
- 	defer fout.Close()
 
- 	for i, n := range answer {
 
- 		s := fmt.Sprintf("Case #%d: %d\n", i+1, n)
 
- 		fout.WriteString(s)
 
- 	}
 
- }
 
 
  |