結果
| 問題 |
No.97 最大の値を求めるくえり
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2014-12-07 20:18:36 |
| 言語 | Go (1.23.4) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,557 bytes |
| コンパイル時間 | 13,828 ms |
| コンパイル使用メモリ | 226,840 KB |
| 実行使用メモリ | 7,960 KB |
| 最終ジャッジ日時 | 2024-11-25 00:09:26 |
| 合計ジャッジ時間 | 27,710 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 13 WA * 6 |
ソースコード
package main
import "fmt"
var xor128_x uint32 = 123456789
var xor128_y uint32 = 362436069
var xor128_z uint32 = 521288629
var xor128_w uint32 = 88675123
const MOD uint64 = 100003
const BOUND = 100000000
func xor128() uint64 {
var t uint32 = xor128_x ^ (xor128_x << 11)
xor128_x = xor128_y
xor128_y = xor128_z
xor128_z = xor128_w
xor128_w = xor128_w ^ (xor128_w >> 19) ^ (t ^ (t >> 8))
return uint64(xor128_w)
}
func main() {
var n, q int
fmt.Scan(&n, &q)
a := make([]uint64, n)
for i, _ := range a {
a[i] = xor128() % MOD
}
var all bool
if uint64(n)*uint64(q) < 100000000 {
all = true
}
exist := make([]bool, MOD+1)
for _, v := range a {
exist[v] = true
}
inv := make([]uint64, MOD+1)
inv[1] = 1
for i := 2; i < int(MOD); i++ {
x := uint64(i)
inv[x] = inv[MOD%x] * (MOD - MOD/x) % MOD
}
/*
memo := make([]uint64, MOD+1)
for i, _ := range memo {
memo[i] = MOD
}
*/
for i := 0; i < q; i++ {
var x uint64
fmt.Scan(&x)
//x = xor128() % MOD
if x == 0 {
fmt.Println(0)
continue
}
if all {
var ans uint64 = 0
for _, y := range a {
z := x * y % MOD
if ans < z {
ans = z
}
}
fmt.Println(ans)
} else {
/*
if memo[x] != MOD {
fmt.Println(memo[x])
continue
}
*/
for k := MOD - 1; k > 0; k-- {
// x * a[i] == k
// a[i] == k * inv(x)
b := k * inv[x] % MOD
if exist[b] {
//memo[x] = b
fmt.Println(b)
break
}
}
}
}
}