Es brach in achteinhalb Minuten durch. Als Hinweis versuchte ich, es schnell mit der Divisionsproduktionsmethode zu lösen. Kam heraus, also reichte ich es ein und es war sicher AC.
a, b = map(int, input().split())
x = a
result = 0
t = 1 / 4096
while x < b:
result += abs((x - a) * (x - b) * t)
x += t
print(result)
In 41 Minuten durchbrechen. Ich habe einen Code geschrieben, um ihn mit ganzen Zahlen zu verarbeiten, und mich gefragt, warum ich nicht AC habe. Es ist zu dumm. Falten Sie den kurzen vertikal und horizontal bis zum Limit und falten Sie dann den langen bis zum Limit. ..
x, y, h = map(int, input().split())
if x < y:
x, y = y, x
x *= 1000
y *= 1000
result = 0
while y > h:
y /= 2
h *= 2
result += 1
while x > h:
x /= 2
h *= 2
result += 1
print(result)
Es kann auch als Ganzzahl verarbeitet werden, solange sich die Zahlen relativ korrekt ändern.
x, y, h = map(int, input().split())
if x < y:
x, y = y, x
x *= 1000
y *= 1000
result = 0
while y > h:
x *= 2
h *= 4
result += 1
while x > h:
y *= 2
h *= 4
result += 1
print(result)
Besiegt. Wenn Sie gehorsam DP, wird es * O * (* N * 2 </ sup> d) sein, also TLE. Der erste Schritt ist der gleiche mit Ausnahme von i - d + 1 .. i und den beiden Enden. In diesem Fall kann * O * (1) anstelle von * O * (* d ) verwendet werden. Es wurde * O * ( N * 2 </ sup>) und wurde gelöst.
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func main() {
N := readInt()
d := readInt()
K := readInt()
buf0 := make([]int, d*N+K+1)
buf1 := make([]int, d*N+K+1)
buf0[0] = 1
for i := 0; i < N; i++ {
t := 0
for j := 0; j < d; j++ {
t += buf0[j]
t %= 1000000007
buf1[j] = t
}
for j := d; j < (i+1)*d; j++ {
t -= buf0[j-d]
if t < 0 {
t += 1000000007
}
t += buf0[j]
t %= 1000000007
buf1[j] = t
}
buf0, buf1 = buf1, buf0
}
fmt.Println(buf0[K-N])
}
const (
ioBufferSize = 1 * 1024 * 1024 // 1 MB
)
var stdinScanner = func() *bufio.Scanner {
result := bufio.NewScanner(os.Stdin)
result.Buffer(make([]byte, ioBufferSize), ioBufferSize)
result.Split(bufio.ScanWords)
return result
}()
func readString() string {
stdinScanner.Scan()
return stdinScanner.Text()
}
func readInt() int {
result, err := strconv.Atoi(readString())
if err != nil {
panic(err)
}
return result
}
#AC für PyPy
N, d, K = map(int, input().split())
buf0 = [0] * (d * N + K + 1)
buf1 = [0] * (d * N + K + 1)
buf0[0] = 1
for i in range(N):
t = 0
for j in range(d):
t += buf0[j]
t %= 1000000007
buf1[j] = t
for j in range(d, (i + 1) * d):
t -= buf0[j - d]
t += buf0[j]
t %= 1000000007
buf1[j] = t
buf0, buf1 = buf1, buf0
print(buf0[K - N])
Recommended Posts