結果
| 問題 |
No.990 N×Mマス計算(Kの倍数)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-02-14 23:40:16 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 1,605 ms / 2,000 ms |
| コード長 | 1,735 bytes |
| コンパイル時間 | 16,776 ms |
| コンパイル使用メモリ | 236,704 KB |
| 実行使用メモリ | 9,028 KB |
| 最終ジャッジ日時 | 2024-11-16 01:47:20 |
| 合計ジャッジ時間 | 17,032 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 19 |
ソースコード
package main
import (
"sort"
"bufio"
"fmt"
"os"
"strconv"
)
var sc, wr = bufio.NewScanner(os.Stdin), bufio.NewWriter(os.Stdout)
func scanString() string { sc.Scan(); return sc.Text() }
func scanInt() int { a,_ := strconv.Atoi(scanString()); return a }
func scanInt64() int64 { a,_ := strconv.ParseInt(scanString(),10,64); return a }
func scanFloat64() float64 { a,_ := strconv.ParseFloat(scanString(),64); return a }
func scanInts(n int) []int {
res := make([]int, n); for i := 0; i < n; i++ { res[i] = scanInt() }; return res
}
func abs(a int) int { if a<0 { return -a }; return a }
func min(a,b int) int { if a<b { return a }; return b }
func max(a,b int) int { if a>b { return a }; return b }
//•*¨*•.¸¸♪Main•*¨*•.¸¸♪( -ω-)ノ ( ・ω・)
func main() {
sc.Split(bufio.ScanWords)
sc.Buffer(make([]byte, 10000), 1000000)
n := scanInt()
m := scanInt()
k := scanInt()
op := scanString()
ans := 0
b := scanInts(m)
a := scanInts(n)
if op == "+" {
cnt := make(map[int]int, 0)
for i := 0; i < m; i++ {
b[i] %= k
cnt[b[i]]++
}
sort.Ints(b)
// fmt.Println(b)
for i := 0; i < n; i++ {
val := (-a[i]%k + k)%k
// l := sort.Search(len(b), func(j int) bool { return val <= b[j] })
// r := sort.Search(len(b), func(j int) bool { return val < b[j] })
//ans += r-l
ans += cnt[val]
// fmt.Println(val)
}
} else {
cnt := make(map[int]int, 0)
for i := 0; i < n; i++ {
v := gcd(k,a[i])
cnt[k/v]++
}
// fmt.Println(cnt)
for val, c := range cnt {
for i := 0; i < m; i++ {
if b[i]%int(val) == 0 {
ans += c
}
}
}
// fmt.Println(cnt)
}
fmt.Println(ans)
}
func gcd(a,b int) int { for b != 0 { a, b = b, a%b }; return a }