結果
| 問題 |
No.462 6日知らずのコンピュータ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-04-24 23:50:59 |
| 言語 | Go (1.23.4) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 945 bytes |
| コンパイル時間 | 10,874 ms |
| コンパイル使用メモリ | 233,308 KB |
| 実行使用メモリ | 6,948 KB |
| 最終ジャッジ日時 | 2024-09-13 12:15:34 |
| 合計ジャッジ時間 | 12,979 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 65 WA * 19 |
ソースコード
package main
import (
"fmt"
"sort"
)
var MOD_VAL int = 1000000000 + 7
func fact(n int) int {
if n <= 1 {
return n
}
return n * fact(n-1) % MOD_VAL
}
func countBits(v int) (n int) {
for v > 0 {
n += v & 1
v >>= 1
}
return
}
var N, K int
var as, nBits []int
func main() {
fmt.Scan(&N, &K)
as = make([]int, K)
nBits = make([]int, K)
for i := 0; i < K; i++ {
fmt.Scan(&as[i])
nBits[i] = countBits(as[i])
}
fmt.Println(solve())
}
func solve() int {
sort.Ints(as)
for i := 0; i < K-1; i++ {
if as[i]|as[i+1] != as[i+1] {
return 0
}
}
if len(nBits) == 0 || len(nBits) > 0 && nBits[len(nBits)-1] < N {
nBits = append(nBits, N)
}
sort.Ints(nBits)
// fmt.Printf("N = %d, K = %d\n", N, K)
// fmt.Println(as)
// fmt.Println(nBits)
preVal := 0
ret := 1
for _, v := range nBits {
gap := v - preVal
if gap == 0 {
ret = 0
break
}
ret *= fact(gap)
ret %= MOD_VAL
preVal = v
}
return ret
}